Java运算符" =="真的比较基于内存引用的两个对象?

时间:2018-02-02 12:46:17

标签: java operators

由于java-doc告诉Java运算符==测试引用相等性(它们是否是同一个对象)。所以" =="只有在比较的两个对象引用表示完全相同的对象时,operator才会返回true,否则"=="将返回false。

但是在运行一段代码时,我发现这个语句并不能满足代码的输出。 这是代码:

public class Test2 {


    public static void main(String[] args)
    {
         String s="Sachin";  
         String t="Sachin";
         System.out.println(s==t); 
    }
} 

令人惊讶的是我找到了输出"true"。 请帮助我理解为什么会这样?

这是我的程序输出截图:

https://i.stack.imgur.com/OZ0PW.jpg

1 个答案:

答案 0 :(得分:4)

你的存在是

     String s="Sachin";  
     String t="Sachin";

创建两个字符串对象,但事实并非如此。

Java优化字符串的使用,以便将文字字符串放在字符串池中,以便在编译器找到时从该池中分配已创建的字符串对象第二次使用相同的字符串。这称为字符串实习

你最好试试这个:

public class Test2 {
    public static void main(String[] args)
    {
         String s="Sachin";  
         String t=new String(s);
         System.out.println(s==t); 
    }
}