Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当字符串==用于与in-System.out.println()和if语句进行比较时,有什么区别_Java_String_Immutability - Fatal编程技术网

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代码和日志(粗体)。这是有区别的

  • 在print语句中,我用了一个长下划线和一些文本。它没有出现
  • att==ptt在给出in print语句时给出false。如果条件为if,则为true 我已经知道了, 什么是引用,什么是对象。
    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));