黑马程序员技术交流社区

标题: 希望谁能解释下 [打印本页]

作者: 党传才    时间: 2012-4-12 13:34
标题: 希望谁能解释下
public class finalTest{
public static void main(String[] args) {
final String book = "测试:"+ 99.0;
final String book2 = "测试:"+ String.valueOf(99.0);
System.out.println(book == "测试:99.0");
System.out.println(book2 == "测试:99.0");
}
}
在群里面看到一个问题,不明白。希望谁能解释下,为什么第二个输出的是false。
作者: 赵云柯    时间: 2012-4-12 13:57
==比较的是两个对象的地址值。
如果改为System.out.println(book2.equals("测试:99.0");
输出的就是true
作者: 袁计艳    时间: 2012-4-12 14:05
是这样的:
正如楼上兄弟说的 ==比较的是地址
然后在回到你的代码上:
final String book2 = "测试:"+ String.valueOf(99.0);
重新在内存开辟了空间
另外要想比较值就要使用 equals
作者: 石好强    时间: 2012-4-12 14:19
本帖最后由 石好强 于 2012-4-12 14:20 编辑

final String book = "测试:"+ 99.0; //这个是进行了一步操作,直接转化成字符串,一个对象,开辟了一个空间[
final String book2 = "测试:"+ String.valueOf(99.0);//这个是进行了两步操作,前面"测试"是一个字符串,而后面String.valueOf(99.0);是一个返回的字符数组对象,开辟了空间,这是第一步操作。而 "测试:"+ String.valueOf(99.0),是第二个操作,是两个对象

而==是比较内存地址值,这肯定是不相等的。

这是我的理解,呵呵。不对之处请指正,我对这一块也不是太通透

作者: 孙国军    时间: 2012-4-12 14:33
final String book2 = "测试:"+ String.valueOf(99.0);
System.out.println(book == "测试:99.0");
System.out.println(book2 == "测试:99.0");
}
}
在群里面看到一个问题,不明白。希望谁能解释下,为什么第二个输出的是false。


System.out.println(book2 == "测试:99.0");
表示的是栈内存中的变量book2所指向的地址值是否和堆内存中字符串"测试:99.0"的地址值相同

而字符串"测试:99.0"的地址值是book1所指向的地址值;

显而易见,book2和book1是两个不同的变量,地址值指向也不同;

顺便说一句,被final修饰的变量是不能够多次赋值的,初次赋值后,就不能在改变;





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