java中的字符串和整数连接

java中的字符串和整数连接,java,string,Java,String,为什么第一个陈述是正确的,其余的是错误的。字符串串联与int的行为是否不同?编辑: 我想我看到了这段代码: String s1 = "abcd5"; String s2 = "abcd"+"5"; String s3 = "adcd"+s1.length(); System.out.println("s1 == s2 : "+(s1 == s2)); System.out.println("s2 == s3 : "+(s2 == s3)); System.out.println("s1 ==

为什么第一个陈述是正确的,其余的是错误的。字符串串联与int的行为是否不同?

编辑:

我想我看到了这段代码:

String s1 = "abcd5";

String s2 = "abcd"+"5";
String s3 = "adcd"+s1.length();
System.out.println("s1 == s2 : "+(s1 == s2));
System.out.println("s2 == s3 : "+(s2 == s3));
System.out.println("s1 == s3 : "+(s1 == s3));
鉴于我的第一个解释:

因为
s1
s2
是文本字符串,所以在编译时,它们具有相同的字符串值,并且是内部的,因此引用相同的对象。
s3
是在运行时计算的字符串,因此它不引用相同的字符串实例。


但事实上,守则是:

String s1 = "abcd5";    
String s2 = "abcd"+"5";
String s3 = "abcd"+s1.length();
正如@Aniruddh Dikhit所注意到的(非常好的眼睛):在您分配给
“s3”
的任务中,字符串的
“d”
位于第2位,而不仅仅是第4位。

因此,无论您以何种方式声明
s3
(带或不带文字),
s3
值与
s1
s2
引用的字符串的值不同,因此它不可能具有相同的对象引用。

不是该问题的重复。这个问题完全不同。@Pshemo至少您链接的问题的上下文是相似的,当前的重复问题实际上与这个问题无关。问题是您对“s3”的赋值,字符串的第二位有“d”。不幸的是,这已被标记为重复。因此,将“ab…”和“ad…”进行比较。因此,只要混合中有s3,false就是正确的行为或另一个重复:明白了,对于s3,编译器无法确定值,因此在运行时s3引用指向创建“abcd5”对象的堆。s3=“adcd”是一个打字错误,我们都知道这里讨论的真正概念是什么。。。。事实上,对于陷阱问题来说,这个小小的字符串值差异似乎很奇怪。
String s1 = "abcd5";

String s2 = "abcd"+"5";
String s3 = "adcd"+s1.length(); // a - d - c - d and not  a - b - c - d