java中==不是只能判断数值类型吗?为什么可以判断空字符串,输出为true?

public class Test {

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

}

《《《《《《《《《《《《《《《《《《《《

输出为true
阅读 4.3k
6 个回答

用双引号创建的相同内容的字符串,均指向同一个引用。而new String出来的是新的一个对象。这也是为什么要尽量避免new String
<pre>

public class StringEqualsTest{
    public static void main(String[] args) {
        String s1="Gavin";
        String s2=new String("Gavin");

        System.out.println("Gavin"==s1);
        System.out.println("Gavin"==s2);
    }
}


$java StringEqualsTest
true
false

String不是基本数据类型,所以使用==是比较的内存地址。

网上关于Java的==和equals()的介绍很多,随便浏览几篇你就可以明白这个问题,这个问题表面很简单,但是越往后就会越深入。

楼主 可以先去理解下 引用比较和值比较

java中==不是只能判断数值类型吗?
答:不是,==可以判断基本数据类型(数值类型)、对象。

==比较的是字面值
字符串为引用类型,且已建立的字符串在内存不可变,s引用的是""串的内存地址,相同的地址比较自然一样

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题