关于"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 里 没有地址的说法 应叫做 引用)
(注:转自寒夜孤星)
浙公网安备 33010602011771号