DESKTOP-94E2ELT_20200911-刘雪丽
一、问题
在出题的时候碰到这个问题
public class StringTest {
private static final String MESSAGE="jiayou";
public static void main(String[] args) {
String a ="jia"+"you";
String b="jia";
String c="you";
System.out.println(a==MESSAGE);
System.out.println((b+c)==MESSAGE);
}
}
结果为:true false
这样做的话我是明白的,就知道怎么回事,但是为啥给b c加了final修饰后它的结果变了,有点不太懂
public class StringTest {
private static final String MESSAGE="jiayou";
public static void main(String[] args) {
String a ="jia"+"you";
final String b="jia";
final String c="you";
System.out.println(a==MESSAGE);
System.out.println((b+c)==MESSAGE);
}
}
结果为:true true
解答:没有final修饰时,但凡他俩相加,都会生成新的对象并指向堆里边,即内容虽然一样,但是所指地址是不同的,即结果为false.
final修饰后这个字符串在字符串常量池里边对应的值不会再发生改变了,所以在加的时候就是直接在字符串池里边拼的,以为都在字符串池中,所以他们相等。
近期评论