|
最初由 zdr 发布
[B]
既然使用构造函数的方法所生成的对象,就像其他类生成的对象一样,有自己的独立空间,那么str3和str2代表不同对象,str3==str2怎么会相同呢
不明白,希望再说一下 [/B]
有点钻牛角尖的说
"java"是存放在某一段内存中(在编译时它的相对地址已经固定下来了)比如说它的首地址0X00001111(这个数不一定是一个绝对地址, 很可能也是一个相对地址)
str2="java" 实际上相当于把0X00001111赋给了str2
同时
str3="java" 也把0X00001111赋给了str3
str3==str2做的是数值比较, 二者相同是自然的事
str1=new String("java" ;
则把"java"这段内存复制到另一段内存中去, 然后, 把参照(JAVA中没有指针的概念, 其实把首地址叫做参照更合适, 但无论如何它代表了一个数)赋给str1, 由于str1肯定不会是"java"的参照因此, 数值比较不能成立
Object.equals(Object)(注意, equals方法是从Object基本类中继承下来的, 不光是String可以用, 其他的对象也都能用)则是对象的比较, 换句话说相当于内存的比较, 只有当两断内存完全一致才能成立
JAVA的一个优点就是没有也不需要直接对内存做什么操作,因此比较对象的参照数值基本上没有什么意义 |
|