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修饰后这个字符串在字符串常量池里边对应的值不会再发生改变了,所以在加的时候就是直接在字符串池里边拼的,以为都在字符串池中,所以他们相等。

标签


© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1