我在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等于:
未打印
帮助我解决这个问题
提前致谢,
拉吉
答案 0 :(得分:12)
它与("Using == str1 and str2 Equals :" + str1) == str2
相同,当然这是错误的。表达式从左到右进行解析,因此首先它连接"Using == str1 and str2 Equals :"
和str1
,然后应用==
运算符。
答案 1 :(得分:7)
请参阅http://bmanolov.free.fr/javaoperators.php以获取Java中的运算符优先级表。
+运算符的优先级高于==运算符。
因此,实际上,您的代码等同于以下内容:
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));
注意括号的新位置。
答案 2 :(得分:4)
因为+与=相比具有更高的优先级,并且如果你使用括号(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
答案 3 :(得分:2)
也许是一个操作订单的事情?尝试:
System.out.println("Using == str1 and str2 Equals :" + (str1 == str2));
答案 4 :(得分:2)
尝试使用()这样包围它:
System.out.println("Using == str1 and str2 Equals :" + (str1 == str2));
答案 5 :(得分:0)
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 class equals方法。
答案 6 :(得分:-1)
原因是您无法使用==
来比较Java中的字符串。
在C ++或C#(或支持运算符重定义的其他语言)中,您可以覆盖==
运算符以提供该功能。 Java不支持。
答案 7 :(得分:-1)
str1.equals(str2)
返回true
,因为equals()
函数会比较字符串变量的内容,而==
运算符会比较实例。由于str1
和str2
是String
类实例的两个不同之处,因此会返回false
答案 8 :(得分:-1)
在Java ==
运算符中匹配两个对象,即它们的地址,而.equals()
方法会计算两个对象的值,这就是为什么true
equals()
和false
{1}} ==
因为两者都是不同的对象。
答案 9 :(得分:-2)
==
只能用于比较原始数据类型。要比较对象,您需要使用equals
方法。在对象上使用==
运算符实际上会比较它们的地址而不是值。