A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 嘟嘟嘟嘟嘟 初级黑马   /  2015-7-17 00:14  /  508 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 嘟嘟嘟嘟嘟 于 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.

这样理解对吗?



7 个回复

倒序浏览
final修饰的变量是常量
回复 使用道具 举报
不会吧,应该都是true吧
回复 使用道具 举报
pathnet 发表于 2015-7-17 00:16
不会吧,应该都是true吧

不是,确实是一个 false一个true
回复 使用道具 举报
final String b = "hello";
回复 使用道具 举报
final String b = "hello";
被fianl修饰的变量不能再次被赋值,可以认为已经是常量。
你可以将 str  a  b 依次打印获取它们的结果
回复 使用道具 举报
final修饰的变量会成为常量,只能赋值一次,
回复 使用道具 举报
我的想法,不知道是这样么?
1. c == str 是表示判断两者的地址值
2. 虚拟机在创建d =b+1时,直接使用得到的值"hello1"在内存中找同样的值,然后让变量指向这个地址.
而虚拟机去创建c = a+1时, 由于a是变量,所以没有去内存找(会造成不确定性?),而是在内存中开辟了一个新的空间来存.
所以,c == str是false, d == str是true.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马