开发者社区 问答 正文

final变量和普通变量的区别

        String str1 = "hello2";
        final String a = "hello";
        String b = "hello";
        String c = a + "2";
        String d = b + "2";
        System.out.println(str1 == c);
        System.out.println(str1 == d);

结果:
true
false
为什么第二个结果为false?这是什么原理呢?

展开
收起
蛮大人123 2016-06-07 15:33:26 3269 分享 版权
3 条回答
写回答
取消 提交回答
  • final变量不可以修改
    2019-07-17 19:30:20
    赞同 展开评论
  • final变量的值不能再变更,普通变量可以改变
    2019-07-17 19:30:20
    赞同 展开评论
  • 我说我不帅他们就打我,还说我虚伪

    final变量在编译期间就已经确定了值,然后这个值是被存储到运行时数据区域中的常量池中的。
    而你使用b+"2",是使用了引用变量b, JVM对于字符串引用,由于在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的,即b+"2"无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给d。所以上面程序的结果也就为false。
    如果改成String d = "hello" + "2";那么str1==d就是true了,因为d本质上也是常量了。

    2019-07-17 19:30:20
    赞同 展开评论
问答地址: