String s1 = "abc"; String s2 = "a"; String s3 = "bc"; System.out.println(s1 == (s2+s3)); false??

2024年11月20日 16:41
有4个网友回答
网友(1):

==是比较引用是否相等,即比较的是是否引用的同一个对象。

你的代码中:

s1引用的是常量池中的字符串对象"abc",而s2+s3会在堆中创建一个字符串对象"abc",它们是两个不同的对象,==的结果当然是false。

可以改用equals方法,比较值是否相等,像这样:

s1.equals(s2+s3)。

如果是这样的:

String s1="abc";

final String s2="a";

final String s3="bc";

则s1==s2+s3的结果就是true。因为s2、s3是常量(final修饰),常量字符串连接后依然是常量。所以,s2+s3引用的也是常量池中的字符串对象"abc",与s1引用的是同一个对象,==的结果就是true。

下面是验证:

网友(2):

(s2+s3)虽然值与s1相同但是相当于你在空间里new了一个新的string地址是不能直接调用原有的s1的

网友(3):

string型的不能==来判断。String不只是一个类型,还是一个封装好的类,除了内容外还包含存储地址以及各种方法,它和int有着本质的不同。==代表完全相同,String是不可能的,指向的存储地址就不一样

网友(4):

改成s1.equals(s2 + s3)