Java 当字符串==用于与in-System.out.println()和if语句进行比较时,有什么区别
在我的日志中,我发现以下输出:Java 当字符串==用于与in-System.out.println()和if语句进行比较时,有什么区别,java,string,immutability,Java,String,Immutability,在我的日志中,我发现以下输出: String att = "siva"; String ptt = "siva"; System.out.println("__________________________ptt.equals(att)_______"+ptt.equals(att)); **System.out.println("__________________________att == ptt________"+att == ptt);** if(att == ptt)
String att = "siva";
String ptt = "siva";
System.out.println("__________________________ptt.equals(att)_______"+ptt.equals(att));
**System.out.println("__________________________att == ptt________"+att == ptt);**
if(att == ptt){
System.out.println("true");
}else{
System.out.println("false");
}
这里,如果您查看java代码和日志(粗体)。这是有区别的
att==ptt和att.equals(ptt)之间的区别是什么。
字符串的不变性 但是,当以不同的形式打印时,为什么会返回false和true呢?为什么我在print语句中输入的文本没有反映在日志中 如果我错了,请改正。。或者如果需要任何额外的输入 在print语句中,我用了一个长下划线和一些文本。 它没有出现 因为,这些下划线与
att
连接,并与ptt
检查为引用相等(=
),并且打印为false,因为连接字符串和ptt
在引用上不相等。按如下所示进行更改,以获得所需的输出
__________________________ptt.equals(att)_______true
**false**
true
att==ptt
在打印语句中给出时给出false。和
如果在if条件下给出,则为true
两者都在字符串常量池中引用相同的字符串文字,但在上一个案例(您的第一个问题)中,att
与欠分连接,并与==
进行比较,将行更改为:
System.out.println("__________________________att == ptt________"+(att == ptt));
现在您的输出将如预期的那样。首先比较
att
和ptt
的参考,然后打印。你只忽略了括号。现在,结果将与if语句中的结果相同。结果是true
,因为您使用字符串文本来分配值“siva”
。在内部,这个文本得到了相同的引用。如果创建字符串对象,如newstring(“siva”)
,则代码的输出将为false,因为您将引用与=
进行比较,如果创建两个对象,则引用不同。Abimaran所说的是正确的。。。若要在println()
语句中打印true
,请在att==ptt
周围加上括号,如(att==ptt)
,其中括号在连接之前优先。若要了解发生了什么,请阅读有关运算符优先级的内容
System.out.println("__________________________att == ptt________"+(att == ptt));