Object o1 = new Object();
Object o2 = new Object();
//o1=o2;
System.out.println(o1.equals(o2));
它返回false
。true
如果删除了注释,则可以返回。
为什么同一件事不适用于该String
班级?
String s1=new String();
String s2=new String();
System.out.println(s1.equals(s2));
它返回true
。为什么?(因为String
使用实习生或其他涉及的东西?)
因为
String的equals()
比较内容,而不是对象本身。
公共布尔等于(Object anObject)
将此字符串与指定对象进行比较。当且仅当参数不为null且该
String
对象表示与此对象相同的字符序列时,结果为true 。
/* String.equals() */
public boolean equals(Object anObject) {
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;
}
(链接到String.equals()的源)
与
等于Object相等
:
类的equals方法
Object
在对象上实现了最有区别的对等关系。也就是说,对于任何非空引用值x
和y
,当且仅当x
和y
引用同一对象(x == y
具有值true
)时,此方法返回true 。
/* Object.equals() */
public boolean equals(Object obj) {
return (this == obj);
}
(链接到Object.equals()的源)
另外,请不要忘记equals()
函数的约定:
equals方法对非null对象引用实现对等关系:
- 这是 自反的 :对于任何非null的参考值
x
,x.equals(x)
应返回true。- 它是 对称的
:对于任何非空引用值x
和y
,x.equals(y)
当且仅当y.equals(x)
返回true时,才应返回true。- 它是 传递
性:对于任何非空的参考值x
,y
以及z
,如果x.equals(y)
回报率true
和y.equals(z)
回报率true
,那么x.equals(z)
应该返回true
。- 它是 一致的
:对于任何非null的引用值x
和,只要不修改对象的equals比较中使用的信息y
,就可以多次调用x.equals(y)
一致返回true
或一致返回false
。- 对于任何非null的参考值
x
,x.equals(null)
应返回false
。
问题内容: 出于好奇,我尝试了这个例子。 输出为“字符串”。我想知道JVM决定在什么基础上调用以String作为参数而不是Object的方法。 问题答案: 只要可以将多个重载方法应用于参数列表,就会使用最具体的方法。 在这种情况下,传递时都可以调用这两种方法,因为“空类型”既可以分配给也可以分配给。采取的方法更加具体,因此将被选择。
我在做一个作业,我得到了下面这个问题。 使用方法创建的字符串对象存储在内存中的哪里? 在恒定池中 在堆上(新操作员对象的区域)
问题内容: 谁能从此链接http://www.javatpoint.com/corejava-interview- questions-3 解释问题87和89 87)在下面的代码中将创建多少个对象? 答案是:只有一个物体 89)在下面的代码中将创建多少个对象? 答案是:两个对象,一个在字符串常量池中,另一个在非池(堆)中。 问题答案: 尽管是用Java编写的类,但它是一种与JVM有特殊关系的特殊类
问题内容: 我建立了一个领域的课程。然后,我创建了两个对象,我也必须使用运算符对其进行比较。这是我所做的: 问题答案: 比较对象引用,它检查两个操作数是否指向同一对象(不是等效对象,是同一对象)。 如果要比较字符串(以查看它们是否包含相同的字符),则需要使用来比较字符串。 在你的情况下,如果字符串匹配,则确实将两个居中实例视为相等,则: …但是通常,如果你要定义一个类,那么等效性要比单个字段的等效
问题内容: 之间有什么区别 和 问题答案: 当你使用字符串文字时,可以将字符串嵌入,但是当你使用时,你将获得一个新的字符串对象。 在此示例中,两个字符串文字均引用相同的对象: 在这里,创建了2个不同的对象,它们具有不同的引用: 通常,应尽可能使用字符串文字表示法。它更易于阅读,并且为编译器提供了优化代码的机会。