问答详情
源自:2-4 Java 中的 String 类常用方法 Ⅱ

为什么这里不能用==比较

 Scanner A=new Scanner(System.in);

  String B=A.next();

   if(B=="yes")

改成

 Scanner A=new Scanner(System.in);

  Int B=A.nextInt();

   if(B==1)

又可以啦,为什么???

提问者:我喜欢Love 2015-04-22 15:03

个回答

  • Absolute_Duo
    2015-04-26 15:57:33

    string类的变量中保存的是字符串的首地址,当用==运算时比较的是两个string变量的地址是否相等;

    当用equals比较的是string变量所指向的内容是否相等;

    比如String a="abc",b="abc"; 则a与b变量的地址是不相同的但其所指向的内容都是"abc"

  • 我喜欢Love
    2015-04-23 20:20:33

    String是一个类啊,不是基本数据类型,所以 String B=A.next();和 String B="yes";应该都是引用,我就是不明白为什么前者可以是用==,而后者不可以。。。。求大神回复啊!

  • 抖球鸟
    2015-04-22 22:20:17

    一个是基本类型,一个是对象的比较,==用于基本类型是可以的,不比较内存地址,只是值比较。

  • 我喜欢Love
    2015-04-22 15:59:26

      String B="yes";

       if(B=="yes")

    但是为什么改成这让又可以呢????你说String是引用才会造成以上的错误,这也是引用啊,却可以使用==比较

  • 康振宁
    2015-04-22 15:17:17

    因为你上面比较的是字符串型,是一个引用类型,而下面是整型数据,是一个基本类型,所以会这样,一般在Java中的比较字符串都是使用equals()方法来比较,当然equals也是需要重写的