最近很多朋友对这个很迷糊,我还是解释一下
1)Object是任何类的父类,Object的equals里面用的是==
上Object 源代码。
public boolean equals(Object obj) {
return (this == obj);
}
任何类如果不重写equals,比较的其实就是引用的地址!!也就是equals ==是一样的。
2)String 为什么看似比较另类?
String a="test";
String b="test";
String c= new String("test");
首先说说JVM的堆和栈,比如声明了以上3个变量,第一个test,放入栈中,第二个先看栈里面有没有相同的Test,如果有就直接用了,返回相同的地址。所以a.equal(b),a==b.
第三个,我们一看到new ,这个是对象,对象放堆里面,所以地址跟上面不同,所以a!=c,但是a.equals(c)
上String源代码
public boolean equals(Object anObject) {
//如果2个地址一样,那么肯定是true
if (this == anObject) {
return true;
}
//如果不一样,比较内容!!!!!
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
a!=c ,但是a.equals(c)
分享到:
相关推荐
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,很多开发者容易混淆它们。理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java ...
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的运算符,它们之间的区别是非常重要的。 首先,我们需要了解 Java 中的内存模型。在 Java 中,变量可以分为两种:基本类型(primitive type)和...
【Java面试题】equals与==的区别
在Java编程语言中,`equals`方法与`==`操作符是进行对象比较时最常用的两种方式,但它们之间存在着显著的区别。理解这些差异对于正确地处理对象比较至关重要。 ### `==` 操作符 `==`操作符主要用于比较两个基本...
字符串的intern()方法也值得讨论,它会返回常量池中与当前字符串相等的字符串,如果常量池中不存在,则将当前字符串放入常量池并返回引用。这可能导致`==`和`equals()`产生相同的结果: ```java String str1 = new ...
Java 中的equals和==的区别 Java 是一种面向对象的编程语言,其中有两种数据类型:基本数据类型和引用数据类型。基本数据类型包括整数类型、浮点数类型、字符类型、布尔类型等,共有八种;而引用数据类型则包括 ...
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个常用的操作符,经常用于比较对象或变量的值。然而,许多开发者不知道它们之间的区别,或者误用它们,导致程序出错。下面我们将详细解释 equals 和 == 的...
Java 中equals和==的区别
java中equals和==的区别-5页.pdf
hashcode、equals、==总结1简单总结.txt,他们之间的区别
而`equals()`方法是Object类中的一个成员方法,它的默认行为也是比较两个对象的引用是否相等,与`==`一致。但是,很多类(如String、Integer等)都重写了`equals()`方法,以便进行更深层次的内容比较。例如,String...
1. 对于非字符串对象,`equals()`方法默认的行为与`==`相同,即比较对象的引用。但是,通常建议覆盖`equals()`方法以实现根据对象内容进行比较,而不是仅基于引用。 2. 在`String`类中,`equals()`方法已经被重写,...
equals方法的默认实现是比较两个对象的引用是否相同,这与"=="运算符的功能是一样的。但是,很多Java类都重写了equals方法以提供更加有用的行为。例如,String类就重写了equals方法,以便比较两个字符串的内容是否...
默认情况下,`equals()`方法的行为与`==`一样,即比较对象的引用。然而,为了实现更复杂的逻辑,比如比较对象的内容而不是引用,通常需要重写`equals()`方法。例如,String类和许多其他类都重写了`equals()`,使得它...
System.out.println("1,通过 equals 输出的结果为:greating 与 Hello 的值不相等!"); } // 使用 == 比较字符串引用 if ((greating.substring(0, 2) + "llo") == "Hello") { System.out.println("2,通过 ==...
在Java编程语言中,`equals()` 和 `==` 都用于...对于String类,由于其特殊的常量池机制,`==` 和 `equals()` 的行为可能与预期不同,需要特别注意。在处理自定义对象时,通常需要重写`equals()`方法以实现内容比较。