String类型的比较(为什么比较字符串是否相等时不用=号用equals()的)

class StringDemo {
    public static void main(String[] args) {
        char[] msg = {'h','e','l','l','o'};
        String t1 = "hello";
        String t2 = new String("hello");
        String t3 = new String(msg);
        String t4 = t3;
        String t5 = "hello";
        System.out.println(t1==t2);//false
        System.out.println(t2==t3);//false
        System.out.println(t3==t4);//true
        System.out.println(t5==t1);//true

        System.out.println(t1.equals(t1));//true
        System.out.println(t1.equals(t2));//true
        System.out.println(t1.equals(t3));//true
        System.out.println(t1.equals(t4));//true
        System.out.println(t1.equals(t5));//true
    }
}


new 出来的String类型和t1这种“常亮型”声明不同,在内存上也放在的不同的地方,在Java中String里面的=判断,是在内存地址上是不同的,不是同一个对象,=比较的就是不是同一个对象。任何new出来的类型变量都不会“相等”。

Java中存在一个串池,

s和s1引用的是同一个字符串对象.


String s = "hello";
String s1 = "hello";

这两句只会创建一个"hello"字符串放入串池里面,s和s1只是这个字符串的两个引用而已.


用oop来解释的话:

java中的==是用来判断对象所使用的内存地址是不是同一个,进而判断是不是同一个对象。例如 objA == objB
注意这里是同一个对象才会是true,如果不是同一个对象,哪怕两个对象所有属性都相同也会返回false。

而equals则是一个方法,你可以为自己的类编写equals方法来判断是不是相等。这里String类就提供了equals方法来判断两个String对象是不是相同,而不是去判断两个String对象是不是同一个对象,因为我们一般使用中,只关心两个字符串内容相同与否,而不会关心是不是同一个对象。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值