java中的运行时布尔值和字符串错误?

时间:2017-08-20 04:49:34

标签: java

嗨,那个println给了我错误,但如果我只是单独打印它工作正常。任何想法为什么会这样?

 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
}
}

还要提前感谢:)

3 个答案:

答案 0 :(得分:0)

您无法使用==来比较布尔值和字符串,而这正是因为应用运算符的顺序而确实发生的情况。

你可以使用简单的括号来解决这个问题:

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

当然,如果你没有结合两个不同运算符的结果,那就可以了:

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

因此,只需阅读编译错误即可。

答案 1 :(得分:0)

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

rnorm

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

答案 2 :(得分:0)

operators而言,+优先于==

这意味着这段代码:

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

由编译器翻译为:

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

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

并使用"Varun " String比较器对其==进行应用,结果为:

booleanExpression == "Varun "

booleanString进行比较无效 无论如何,即使它是,你也不希望输出对象之间==比较的布尔结果。

因此,只需在括号中加上==比较,以向编译器指示必须一起评估操作:

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

它将产生有效的连接:

String + boolean + String + boolean + String