黑马程序员技术交流社区

标题: 关于final修饰符的问题 [打印本页]

作者: 嘟嘟嘟嘟嘟    时间: 2015-7-17 00:14
标题: 关于final修饰符的问题
本帖最后由 嘟嘟嘟嘟嘟 于 2015-7-17 01:05 编辑
  1. public static void main(String[] args) {
  2.                 String str = "hello1";
  3.                 String a = "hello";
  4.                 final String b = "hello";
  5.                 String c = a + 1;
  6.                 String d = b + 1;
  7.                 System.out.println(c==str);//结果为 false
  8.                 System.out.println(d==str);//结果为true
  9.         }
复制代码

代码如上
为何两者的判断结果会不同?

------------------------------------------------
我的想法
1. c == str 是表示判断两者的地址值
2. 虚拟机在创建d =b+1时,直接使用得到的值"hello1"在内存中找同样的值,然后让变量指向这个地址.
而虚拟机去创建c = a+1时, 由于a是变量,所以没有去内存找(会造成不确定性?),而是在内存中开辟了一个新的空间来存.
所以,c == str是false, d == str是true.

这样理解对吗?




作者: 李金伦    时间: 2015-7-17 00:16
final修饰的变量是常量
作者: pathnet    时间: 2015-7-17 00:16
不会吧,应该都是true吧
作者: 嘟嘟嘟嘟嘟    时间: 2015-7-17 00:17
pathnet 发表于 2015-7-17 00:16
不会吧,应该都是true吧

不是,确实是一个 false一个true
作者: 叶顺达    时间: 2015-7-17 00:36
final String b = "hello";
作者: 叶顺达    时间: 2015-7-17 00:38
final String b = "hello";
被fianl修饰的变量不能再次被赋值,可以认为已经是常量。
你可以将 str  a  b 依次打印获取它们的结果
作者: tao13yang    时间: 2015-7-17 00:48
final修饰的变量会成为常量,只能赋值一次,
作者: 嘟嘟嘟嘟嘟    时间: 2015-7-17 01:04
我的想法,不知道是这样么?
1. c == str 是表示判断两者的地址值
2. 虚拟机在创建d =b+1时,直接使用得到的值"hello1"在内存中找同样的值,然后让变量指向这个地址.
而虚拟机去创建c = a+1时, 由于a是变量,所以没有去内存找(会造成不确定性?),而是在内存中开辟了一个新的空间来存.
所以,c == str是false, d == str是true.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2