关于"equals" &" =="异同

 关于"equals" &" =="异同                                    

 

String 不是 Java 中的一个基本类型 它是一个 类。这一点从它的开头大写 S 就可以大致看出来

在 Java 中 比较有两种方式 == 和 equals()
==        比较的是 两个实例的内存地址
equals()  比较的是 两个实例的各属性值是否完全相等

equals() 是从 Object() 继承来的 也就是说每一个 对象都有这个 equals()
但是如果没有被覆盖的话 equals() 默认也是比较 内存地址, 和 == 一样

String str1=new String("Hi Mom");和

 String str2=new String("Hi Mom");


分别创建了两个不同的 String 实例, 在内存中分配了不同的地址
所以 用 == 比较得到的结果是 false

String str3=str1;
设一句执行后 把 str1 的地址 传给了 str3
这时 str1 和 str3 都指向同一块内存
所以 用 == 比较得到的结果是 true

要说明的是 如果你这样写:
String str1 = "Hi Mom"
String str2 = "Hi Mom"
那么编译器会 很聪明的只创建 一个实例 而让 str1 和 str2 都指向这个地址
所以这时 str1 == str2 就会返回 true

Java中的“=”是赋值的意思
对于 基本类型 赋过去的是 一个值
对于 对象来说 赋过去的是 这个对象实例的地址

(需要说明的是 为了 阐述清楚 用了 地址 一词 但是在 Java 里 没有地址的说法 应叫做 引用)

(注:转自寒夜孤星)

posted on 2006-11-29 11:22  libran  阅读(402)  评论(0)    收藏  举报