[英]strange behavior of == in Java
我在java中观察到一个奇怪的行为==
运算符。 我正在尝试打印输出如下
String str1 = "Rajesh";
String str2 = "Rajesh";
System.out.println("Using equals() str1 and str2 Equals :"
+ str1.equals(str2));
System.out.println("Using == str1 and str2 Equals :"
+ str1 == str2);
第一个SOP声明打印
使用equals()str1和str2等于:true
而下一个SOP打印只是假的。
我尝试在eclipse和Net Beans中进行编译,但结果是一样的。 我很困惑为什么
使用== str1和str2等于:
不打印
帮助我解决这个问题
提前致谢,
拉吉
它与("Using == str1 and str2 Equals :" + str1) == str2
,当然这是假的。 表达式从左到右解析,因此首先它连接"Using == str1 and str2 Equals :"
和str1
,然后应用==
运算符。
有关Java中运算符优先级的表,请参见http://bmanolov.free.fr/javaoperators.php 。
+运算符的优先级高于==运算符。
因此,实际上,您的代码等效于以下内容:
System.out.println( ("Using == str1 and str2 Equals :" + str1) == str2);
请注意我添加的括号的位置。 它评估如下:
System.out.println( (str_x + str1) == str2);
然后到这个:
System.out.println( str_y == str2 );
然后到这个:
System.out.println( false );
为了得到你想要的结果,必须使用括号来指定你希望在+运算符之前解析==运算符:
System.out.println( "Using == str1 and str2 Equals :" + (str1 == str2));
注意括号的新位置。
因为+与=相比具有更高的优先级,并且如果你使用括号(str1 == str2),那么这个结果为真,因为最高优先级是(。所以首先它检查数据中的括号。
String str1 = "Rajesh";
String str2 = "Rajesh";
System.out.println("Using equals() str1 and str2 Equals :"
+ str1.equals(str2));
System.out.println("Using == str1 and str2 Equals :"
+ (str1 == str2));
输出:
Using equals() str1 and str2 Equals :true
Using == str1 and str2 Equals :true
也许一个操作订单的事情? 尝试:
System.out.println("Using == str1 and str2 Equals :" + (str1 == str2));
尝试使用()这样包围它:
System.out.println("Using == str1 and str2 Equals :" + (str1 == str2));
当且仅当x和y引用同一个对象时,equals方法返回true.Follwoing是equals方法的Object类实现。
public boolean equals(Object obj) {
return (this == obj);
}
在String类中,此方法已被覆盖如下。
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;
}
如果使用==运算符,则只检查两个引用是否具有相同的对象。 类似于Object类equals方法。
原因是您无法使用==
来比较Java中的字符串。
在C ++或C#(或支持运算符重定义的其他语言)中,您可以覆盖==
运算符以提供该功能。 Java不支持这一点。
str1.equals(str2)
返回true
因为equals()
函数比较字符串变量的内容,其中as ==
运算符比较实例。 由于str1
和str2
是String
类的两个实例差异,因此返回false
在Java中==
操作符匹配的两个对象,即他们的地址,而.equals()
方法符合项目两个对象的值,这就是为什么你得到true
的equals()
和false
的==
因为它们都是不同的对象。
==
只能用于比较原始数据类型。 要比较对象,您需要使用equals
方法。 在对象上使用==
运算符实际上比较了地址而不是值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.