问一道JAVA小程序

293关注482浏览

int i = 0;
String a = "a";
String b = "a0";

为什么b.equals(a+i)为true
而b==a为false呢

a+i结果不是"a0" String字符吗
String应该在都字符池中使用同一对象吧<

展开全部
收起
6回答
提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • Joseph

    15人对此回答表示赞同

    兄弟,你知道为什么要用StringBuffer这个类来修改字符串的内容吗?原因就是String类没有修改的方法,String的任何修改都会产生新的对象,你的修改a+i将会产生一个对象;
    而不是在字符池里面;明白了吗?有疑问再来问我;
    展开
    15
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 阿尔法-Sco

    13人对此回答表示赞同

    呵呵,其实这很容易理解.
    equals()是判断对象中的内容是否相同.
    而==是判断两个对象是否指向同一个对象.
    建议你要了解一下值类型与引用类型的区别,可以对问题的理解帮助更大.
    展开
    13
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 灰机小小

    12人对此回答表示赞同

    equals是比较2个对象的值
    ==是比较2个对象是否为同一对象

    你这个a+i 的值是a0
    但是他和你定义的b不是同一对象所以为false
    展开
    12
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • shutmeup

    9人对此回答表示赞同

    a+i的结果虽然也是"a0",但是这个是计算的结果,而这个“a0”放在堆区,并不是使用的常量池里面的“a0”
    String c="a0" 这个是直接使用的"a0"常量,当然调用的是常量池里的那一个
    所以a+i和b使用equals比较内容相等,使用==比较引用却不同
    而b和c用equals和==都是相同的
    展开
    9
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • Nevaeh

    5人对此回答表示赞同

    a+i结果是"a0",所以b.equals(a+i)为true。

    首先,equals方法是判断两个字符串是否相等,而==是判断两个字符串是否被放置在同一个内存位置。

    抱歉,我没有看清楚你的问题。

    a+i结果是"a0",但是a+i是字符串对象吗?
    展开
    5
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 货真价实冰麒麟

    1人对此回答表示赞同

    equals是object类的一个方法,该方法可以在子类中被重写,为的是当两个分离的对象的内容和类型相配的话,返回真值。如果不重写的话和==一样他们比的都是地址.

    String a;String b这2个都是String 类型的指针,他们是指向字符串池中的某个对象,当a+i时运算结果为"a0",而恰好b也指向这个对象,所以用equals来比的话他们是同一个地址所以返回的是真.
    至于后面的哪个b==a,因为从一开始a就指向了字符"a",
    展开
    1
    0回复
    发布于 6年前

    评论(0)

    收起评论

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部