当前位置: 首页 > 面试题库 >

为什么可以在Java中串联Char和String?

松波
2023-03-14
问题内容

这就是我尝试过的;

public String frontBack(String str) {
      char begin = str.charAt(0);
      char end = str.charAt(str.length()-1);
      return begin+str.substring(1,str.length()-1)+end;
}

我以为它会失败,因为开始和结束都是字符,但事实并非如此。那怎么可能?有人可以解释一下吗?谢谢!


问题答案:

Java的“ +”运算符还可以用作串联运算符。它可以连接原语和对象,并会返回一个字符串作为其结果。

以下说明假定您熟悉Java的包装器类。如果您不熟悉它们,请仔细阅读。

Java的“
+”运算符将语句中使用的所有原始数据类型转换为等效的Wrapper类,并在这些实例上调用toString()方法并使用该结果,该结果是表达式中的字符串。

例如:在Java中,类似的语句System.out.println( 3 + " Four " + 'C' );最终会创建带有content的String "3 Four C"

在上面的语句中,3是原始int变量。“ Four”是一个字符串对象,“ C”是原始char变量。

在’+’concat操作期间,3被转换为对应的Wrapper类-> Integer。然后在其上调用toString()方法。输出为字符串3,即
3”
“四”已为字符串,无需进一步处理。’C’被转换为Character包装器类,并且toString()方法导致返回字符串“ C”。

所以最后,将这三个加在一起,就得到了“ 3四C”。

总结一下:

  1. 如果在“ +”运算符中使用了原语,则将其转换为其Wrapper类,然后在其上调用toString()方法,并将结果用于附加。
  2. 如果使用String以外的对象,则将调用其toString()方法,并将其结果用于附加。
  3. 如果调用了String,那么,没什么好做的,并且字符串本身也用于追加。


 类似资料:
  • 问题内容: 他们为什么决定使用 Java和.NET(和其他一些语言)使其不可变?他们为什么不使它可变? 问题答案: 根据Effective Java第四章第73页第2版: “这样做有很多充分的理由:不可变的类比可变的类更易于设计,实现和使用。它们不易出错且更安全。 […] “ 不可变对象很简单。不可变对象可以恰好处于一种状态,即创建时的状态。如果确保所有构造函数都建立类不变式,则可以保证这些不变式

  • 问题内容: 运行此命令时: 响应为: 这对我来说真是太棒了。我本以为这会带来编译时错误。 为什么我可以在Java中抛出null,为什么将其转换为NullPointerException? (实际上,鉴于我抛出的是null,因此我不知道这是否是“ upcast”) 除了一个非常愚蠢的面试问题(请没人在面试中问这个问题)之外,我看不到任何理由。也许您想被解雇,但这就是…我的意思是,为什么还会有人呢?

  • 问题内容: 我在工作的技术测试中遇到了这个问题。给出以下代码示例: 输出为65534。 此行为仅显示负值。0和正数产生相同的值,表示在SOP中输入的那个。此处的字节无关紧要;我尝试过没有它。 所以我的问题是:这到底是怎么回事? 问题答案: 在您了解这里发生的事情之前,我们需要达成一些先决条件。了解以下要点后,剩下的就是简单的推论: JVM中的所有原始类型都表示为一系列位。的类型是由32位,所表示和

  • 当我要遍历a-z时,我可以使用: 但是里面的原理是什么?为什么我们可以计算char而不需要转移到int来计算?

  • 问题内容: 我需要知道在Java中char和Character之间有什么区别,因为当我制作一个Java程序时,char起作用了,而Character没有起作用。 问题答案: char是表示单个16位Unicode字符的原始类型,而Character是包装器类,它允许我们以OOP类型使用char原始概念。 字符示例 角色示例 它将“ a”转换为“ A”

  • 问题内容: 最近,我阅读了很多有关Unicode代码点的信息,以及它们随着时间的演变,并确保我也阅读了http://www.joelonsoftware.com/articles/Unicode.html。 但是我找不到真正的原因是Java为什么将UTF-16用作字符。 例如,如果我的字符串包含1024个ASCII范围的字母。这意味着等于2KB的字符串内存,它将以任何方式消耗。 因此,如果Java