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

Java字符串连接和实习

武琛
2023-03-14
问题内容

问题1

String a1 = "I Love" + " Java";
String a2 = "I Love " + "Java";
System.out.println( a1 == a2 ); // true

String b1 = "I Love";
b1 += " Java";
String b2 = "I Love ";
b2 += "Java";
System.out.println( b1 == b2 ); // false

在第一种情况下,我知道这是两个字符串文字的串联,因此将对结果“ I Love Java”进行检查,使结果为true。但是,我不确定第二种情况。

问题2

String a1 = "I Love" + " Java"; // line 1
String a2 = "I Love " + "Java"; // line 2

String b1 = "I Love";
b1 += " Java";
String b2 = "I Love ";
b2 += "Java";
String b3 = b1.intern();
System.out.println( b1 == b3 ); // false

上面的返回false,但是如果我注释掉第1行和第2行,则返回true。这是为什么?


问题答案:

问题的第一部分很简单:Java编译器将多个字符串文字的串联视为一个字符串文字,即

"I Love" + " Java"

"I Love Java"

是两个完全相同的字符串文字,可以正确地进行intern。

同样的实习行为并 不能 适用于+=对字符串的操作,所以b1b2在运行时实际构建。

第二部分比较棘手。回忆b1.intern()可能返回的对象b1String与其相等的其他对象。当您保持a1和时a2,您会a1从呼叫返回b1.intern()。当您注释掉a1和时a2,没有要返回的现有副本,因此b1.intern()将您b1自己退还给您。



 类似资料:
  • 问题内容: 为什么在这些情况下输出不同? ==> 印刷:2010年 ==> 打印:200 为什么第一个输出不是30?它与运算符优先级有关吗?就像首先将“ printing”和x连接在一起,然后将结果字符串和y连接在一起?我对么? 问题答案: 它的规则 我在下面显示从高到低的优先顺序: **如果运算符具有相同的优先级 ,* 则 此方法起作用 * 现在 :是字符串” :是Java中唯一将Number连

  • 当我写下面的代码时,我遇到了一个问题 然后我运行我的代码,控制台打印这个 这让我很困惑。为什么第二次打印是真的,而第一次打印是假的??在我对String文字池的理解中,当定义一个字符串时,JVM将检查池中是否包含该字符串,如果不包含,则将该字符串放入池中。 在我的代码中,变量Hello存在于字符串池中,“Helo”和“lo”也在池中,我的问题是 如果池中存在Helo和lo串联的结果。 关于str5

  • 问题内容: String a = “devender”; String b = “devender”; String c = “dev”; String d = “dev” + “ender”; String e = c + “ender”; a 和 b 都指向字符串常量池中的同一String Literal。所以在情况1 应该在内部使用类似- a 和 d 如何指向同一参考而不是 a & e ?

  • 本文向大家介绍字符串连接的Java程序。,包括了字符串连接的Java程序。的使用技巧和注意事项,需要的朋友参考一下 String类的 concat()方法将指定的字符串连接到该字符串的末尾。 示例 输出结果

  • 问题内容: 我有以下代码 输出为。 Java如何完成字符串连接的技巧? 问题答案: 因为Java将表达式转换为类似 实际上,我认为它可能使用s,因此: 解决更高效 这使用“ 字符串”构建器上的方法(针对每种类型),这些方法可以正确处理

  • 本文章将介绍Thymeleaf标准表达式语法中的概念。 学习如何在Thymeleaf模板中显示对象(Bean)的属性值。 已经将类的bean已经设置为名称为的上下文模型。 为这些和属性添加一些格式,学习使用字符串相连接输出。 最后,修改模板以获得一个合理的静态原型(例如,通过一些原型数据替换并显示结果)。 如果要上机实践,请参考:Thymeleaf+SpringMVC5示例项目。这里不再重复创建项