Java中==的奇怪行为

Raj*_*Raj 5 java string boolean equals

==在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);
Run Code Online (Sandbox Code Playgroud)

第一个SOP声明打印

使用equals()str1和str2等于:true

而下一个SOP打印只是假的.

我尝试在eclipse和Net Beans中进行编译,但结果是一样的.我很困惑为什么

使用== str1和str2等于:

不打印

帮助我解决这个问题

提前致谢,

拉吉

shi*_*t66 12

它是一样的("Using == str1 and str2 Equals :" + str1) == str2,当然这是错误的.从左至右,因此在第一它加到表达式进行分析"Using == str1 and str2 Equals :"str1,然后应用==操作.


Aar*_*son 7

有关Java中运算符优先级的表,请参见http://bmanolov.free.fr/javaoperators.php.

+运算符的优先级高于==运算符.

因此,实际上,您的代码等效于以下内容:

System.out.println( ("Using == str1 and str2 Equals :" + str1) == str2);
Run Code Online (Sandbox Code Playgroud)

请注意我添加的括号的位置.它评估如下:

System.out.println( (str_x + str1) == str2);
Run Code Online (Sandbox Code Playgroud)

然后到这个:

System.out.println( str_y == str2 );
Run Code Online (Sandbox Code Playgroud)

然后到这个:

System.out.println( false );
Run Code Online (Sandbox Code Playgroud)

为了得到你想要的结果,必须使用括号来指定你希望在+运算符之前解析==运算符:

System.out.println( "Using == str1 and str2 Equals :" + (str1 == str2));
Run Code Online (Sandbox Code Playgroud)

注意括号的新位置.