|
最初由 田小鱼 发布
[B]
我觉得这个说的有点问题,其实在Object中实现的equals方法,其作用同==完全一样,但是在String类中对equals方法做了覆盖,这些从jdk的lib源码中都能看出来,其实我感觉java就是值比较和值传递,不存在地址比较和地址传递 [/B]
恩, equals用于Object的比较, 而==则用于变量的数值比较, 二者有根本的不同, 所以==不能用于对象的比较而只能用于PRIMITIVE变量的数值比较, 如果一定要用它比较对象的话, 就变成了地址的比较, 这种比较在JAVA中是没有意义的, 另外, JAVA也并不是单纯的传值, 当然说它是传地址也是不确切的, 实际上JAVA传递的是参照.
比如说
Some someA=someB;
someB.propertyA=1;
则someA.propertyA也会变成1
这就说明, 两个变量是同一个对象的参照
String 这个类比较特别, 它没有定义向属性赋值的方法
它只有重建参照才能赋值;
String stringA="java";
String stringB=stringA;
这时候, stringB的参照指向的对象stringA, 而stringA则指向了"java"
如果改变stringA
stringA="new";
这时候, stringB仍然通过原先的对象参照指向"java"
而stringA则不再是原先的参照, 它实际上改变了数值成了一个新的参照指向"new". |
|