题
这个问题已经有一个答案在这里:
- 之间的区别是什么==和平等()in Java? 23的答案
我换讲课人今天和他说使用一个奇怪的代码给我。(他说这是最好使用 .equals
当我问为什么,他回答说"因为它是!")
因此,这里的一个例子:
if (o1.equals(o2))
{
System.out.println("Both integer objects are the same");
}
而不是什么我用:
if (o1 == o2)
{
System.out.println("Both integer objects are the same");
}
之间有什么差异的两个。为什么是他方式(使用 .equals
)更好吗?
发现了这个 在一个快速搜索,但我不能真正有意义的回答:
解决方案
在爪哇, ==
总是比较两个参考文献(非元,这是)-即它考验是否是两个操作数中提到相同的对象。
但是, equals
方法可以重写-那两个不同的对象仍然可以是平等的。
例如:
String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });
System.out.println(x == y); // false
System.out.println(x.equals(y)); // true
此外,这是值得注意的是,任何两个平等 string constants (主要是串的文字,也是组合的string constants通过联)将参照相同的串。例如:
String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!
在这里, x
和 y
引用相同的字符串的,因为 y
是一个编译时间常数相等 "hello"
.
其他提示
该==operator进行比较,如果对象是相同的 实例.等()oerator比较 国家的对象 (例如如果所有属性相等)。你甚至可以替代等()方法来定义自己对象时,等于另一个。
如果你和我每个走进银行,每打开一个全新的账户,每一个存款100美元,然后...
myAccount.equals(yourAccount)
是true
因为他们有 同样值, 但myAccount == yourAccount
是false
因为他们不是 同一个帐户.
(假定适当的定义 Account
类,当然。;-)
==是一个操作员。等于是一种定义在目类
==检查,如果两个物体具有相同的地址的存储和用于原始检查它如果他们有同样的价值。平等的方法在另一方面检查,如果两个物体是比较具有同等价值的(这取决于如何当然等的方法已实施的对象。等方法不能适用于原语(这意味着 如果是原始的。等(someobject)是不允许的,然而someobject.等于(a)是允许的)。
==操作者比较了两个对象引检查他们是否是指同一个实例。这也将返回真正的对匹配成功。例如
public class Example{
public static void main(String[] args){
String s1 = "Java";
String s2 = "Java";
String s3 = new string ("Java");
test(Sl == s2) //true
test(s1 == s3) //false
}}
上述例子==是一个基准比较即这两个对象指向同一个位置存储器
串等于()为评估比较价值的对象。
public class EqualsExample1{
public static void main(String args[]){
String s = "Hell";
String s1 =new string( "Hello");
String s2 =new string( "Hello");
s1.equals(s2); //true
s.equals(s1) ; //false
}}
上面的例子比较的内容。它将回真的,如果串相匹配,否则返回错误的。
在爪哇,当 “==” 操作员用来比较2的对象,查看如果对象参考同地方存储器中。例如:
String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1 == obj2)
System.out.println("obj1==obj2 is TRUE");
else
System.out.println("obj1==obj2 is FALSE");
尽管弦有同样的确切人物("xyz"),上面的代码实际上将会输出:obj1==obj2是假的
Java String类实际上将复盖默认 等() 执行中的对象类和复盖的方法,以便检查只有价值的串,不是他们的位置存储器。这意味着,如果你打电话的平等()方法来比较2串的对象,那么只要实际的字符序列是平等的,这两个对象被认为是平等的。
String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1.equals(obj2))
System.out.printlln("obj1==obj2 is TRUE");
else
System.out.println("obj1==obj2 is FALSE");
这个代码输出如下:
obj1==obj2是真的
public static void main(String[] args){
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2));
////
System.out.println(s1 == s2);
System.out.println("-----------------------------");
String s3 = "hello";
String s4 = "hello";
System.out.println(s3.equals(s4));
////
System.out.println(s3 == s4);
}
在这里,在这个码可以比比的两'=='和'。等于'
在这里。等于是用来比较的参照对象和'=='是用来比较国家的对象。。
(1)==可以应用于这两种原语和目类型,但是平等的()方法可以应用为唯一对象类型。
(2)==不能复盖的内容比较,但是平等的方法,可以复盖为内容的比较(ex;串类、包装类、收集类)。
(3)==给无与伦比的种类型的错误,当尝试应用于异构类型,以平等的方法返回错误的。
的 equals( )
方法和 ==
操作人员执行两个不同的操作。的 equals( )
方法进行比较字内 String
对象。的 ==
操作者比较了两个对象参考,看看它们是否是指相同的实例。以下节目展示了如何将两个不同的字符串的对象可以包含相同的人物,但是提及这些物体不会比较为平等:
// equals() vs ==
class EqualsNotEqualTo {
public static void main(String args[]) {
String s1 = "Hello";
String s2 = new String(s1);
System.out.println(s1 + " equals " + s2 + " -> " +
s1.equals(s2));
System.out.println(s1 + " == " + s2 + " -> " + (s1 == s2));
}
}
变量 s1
指的串的实例创建的 “Hello”
.对象称,由
s2
创建 s1
作为一个初始化程序。因此,在内容的两个串的对象是相同的,
但它们是截然不同的对象。这意味着 s1
和 s2
没有提到相同的对象和
因此,不 ==
, ,如下所示,由输出的所述实例:
Hello equals Hello -> true
Hello == Hello -> false
可以说,"=="操作者返回真的,如果两者的两个操作数属于相同的目的但当它会回来真正为我们不可以分配一个单一的对象多个值
public static void main(String [] args){
String s1 = "Hello";
String s1 = "Hello"; // This is not possible to assign multiple values to single object
if(s1 == s1){
// Now this retruns true
}
}
现在,当发生这种情况实际而言,如果它不发生,那么为什么这是==比较的功能。...
这里是一个简单的解释有关问题:
==(等于)用来评估运算式
作为在那里
等()方法使用比较符串
因此,它能够更好地使用==数字操作和平等()方法串相关的操作。因此,为了比较的对象的平等()方法将是正确的选择。