2016-03-31 153 views
-1

为什么s3==s4返回falses2==s3返回true在行号。分别为8和7。字符串连接:带字符串文字的+运算符

1. String s="hello";` 
2. String s1="he"+"llo"; 
3. String s2="hello"+123; 
4. String s3="hello123"; 
5. String s4=ss+"123"; 

7. System.out.println(s==s1);//prints true 
8. System.out.println(s2==s3);//prints true 
9. System.out.println(s3==s4);//prints false 
+2

什么是'ss'?大概你的意思是'''? – Bathsheba

+0

你在你的代码中有一个错字,你应该使用第5行中的一个s而不是两个ss: String s4 = s +“123”; 不是: String s4 = ss +“123”; – Abdelhak

+0

java中的字符串比较应该使用字符串类的equals()方法完成。 – Patrick

回答

3

s + "123";编译时评估等都不是字符串拘禁的候选人。 (注意,如果sfinal那么这将是)

因此其参考不会一样s3,所以输出是false

其他所有人都比较true由于字符串internment和编译时评估的表达式。

+0

我知道这有点淘气回答这个问题,因为那里必须有足够的重复,但@downvoters,告诉我,如果在答案中有什么不妥之处;-) – Bathsheba

0

当您使用==运算符检查字符串是否相等时,它会检查内存中字符串的位置是否相同。

在情况2和4中,字符串“你好”和“hello123”将已经在字符串常量池的(由于线1和3),并且将被识别为等同于字符串,并且将使用每个内存中的相同位置。简而言之,它将创建一个String对象并将其插入到“hello”和“hello123”的两个实例中。

当你这样做:

String s4=s+"123"; 

在运行时,它创造了s4新的存储位置,因为在JLS说:在运行时通过串联计算

字符串是新创建,因此不同。

因此,内存位置是不同的,因此它给出false作为输出。