2017-08-20 26 views
-2

嗨,println给我错误,但它工作正常,如果我只是分开打印它们。任何想法为什么发生这种情况在java中运行时布尔和字符串错误?

class StringTesting 
{ 
public static void main(String me[]) 
{ 
    String s1="Varun"; 
    String s2="varun"; 
    String s3="Varun"; 
    String s4=new String("Varun"); 
    String s5=new String("Varun"); 
    System.out.println(" "+s1==s3+" "+s1==s2+" ");//here its giving me error 
} 
} 

而且还感谢提前:)

+0

'=='没有您似乎期待的优先顺序。 – user2357112

+0

(假设你期望的优先顺序是“+”+(s1 == s3)+“”+(s1 == s2)+“”') – user2357112

+0

给你*什么*错误? – EJP

回答

0

根据operators,+优先于==

这意味着,这样的代码:

" Varun"=="Varun Varun"=="Varun " 

第一部分" Varun"=="Varun Varun"产生boolean

并施加给它的:

" "+s1==s3+" "+s1==s2+" " 

是由编译器通过类似的东西被翻译的"Varun " String==比较器,结果为:

booleanExpression == "Varun " 

比较booleanString无效。
无论如何,即使是这样,您也不希望输出对象之间比较的布尔结果。

所以只是把之间括弧内的==比较来指示,在操作必须一起评估编译:

" "+(s1==s3)+" "+(s1==s2)+" " 

这将产生一个有效的连接:

String + boolean + String + boolean + String

0

使用==你不能比较布尔值和字符串,这是确实发生的事情,因为应用于运营商的订单。

您可以修复使用简单的括号:

System.out.println(" " + (s1 == s3) + " " + (s1 == s2) + " "); 

当然,如果你不将两个不同运营商的结果,这会工作得很好:

System.out.println(s1 == s3); 

所以,它是足以只读取编译错误。

+0

但它工作正常,当我这样做System.out.println(s1 == s3); –

+0

@VARUNSINGH因为只有一个操作符 - 问题在于当你尝试结合'+'和'=='因为操作符优先 –

+0

我怎么能错过这个,谢谢我现在得到它:) –

0

根据String上的Java文档,比较两个字符串的正确方法是使用.equals方法。

System.out.println("s1 == s2 ?: " + s1.equals(s2)) 

通过在两个对象之间使用==运算符,您可以比较内存位置,而不是对象中包含的实际原始值。

+0

对不起,我完全误解了这个问题。我试图删除这个答案,因为它不相关,但显然手机应用程序没有那个按钮。 – AWildBeard

+0

那你还等什么? – AsifAli72090

+0

失踪的删除按钮出现在应用程序中。 – AWildBeard