提升网站排名,百度seo是啥,网站建设项目可行性分析报告,网站建设进什么科目和 equals 的区别是什么#xff1f; 解读对于基本类型和引用类型#xff0c; 的作用效果是不同的#xff0c;如下所示#xff1a;基本类型#xff1a;比较的是值是否相同#xff1b;引用类型#xff1a;比较的是引用是否相同#xff1b;代码示例#xff1a;String x … 和 equals 的区别是什么 解读对于基本类型和引用类型 的作用效果是不同的如下所示基本类型比较的是值是否相同引用类型比较的是引用是否相同代码示例String x string;
String y string;
String z new String(string);
System.out.println(xy); // true
System.out.println(xz); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true
代码解读因为 x 和 y 指向的是同一个引用所以 也是 true而 new String()方法则重写开辟了内存空间所以 结果为 false而 equals 比较的一直是值所以结果都为 true。equals 解读equals 本质上就是 只不过 String 和 Integer 等重写了 equals 方法把它变成了值比较。看下面的代码就明白了。首先来看默认情况下 equals 比较一个有相同值的对象代码如下class Cat {public Cat(String name) {this.name name;}private String name;public String getName() {return name;}public void setName(String name) {this.name name;}
}
Cat c1 new Cat(王磊);
Cat c2 new Cat(王磊);
System.out.println(c1.equals(c2)); // false
输出结果出乎我们的意料竟然是 false这是怎么回事看了 equals 源码就知道了源码如下public boolean equals(Object obj) {return (this obj);
}
原来 equals 本质上就是 。那问题来了两个相同值的 String 对象为什么返回的是 true代码如下String s1 new String(老王);
String s2 new String(老王);
System.out.println(s1.equals(s2)); // true
同样的当我们进入 String 的 equals 方法找到了答案代码如下public boolean equals(Object anObject) {if (this anObject) {return true;}if (anObject instanceof String) {String anotherString (String)anObject;int n value.length;if (n anotherString.value.length) {char v1[] value;char v2[] anotherString.value;int i 0;while (n-- ! 0) {if (v1[i] ! v2[i])return false;i;}return true;}}return false;
}
原来是 String 重写了 Object 的 equals 方法把引用比较改成了值比较。总结 对于基本类型来说是值比较对于引用类型来说是比较的是引用而 equals 默认情况下是引用比较只是很多类重新了 equals 方法比如 String、Integer 等把它变成了值比较所以一般情况下 equals 比较的是值是否相等。往期精彩回顾《Java 最常见的 200 面试题目》《面试经验分享|精华版》《程序员专属简历合集》