String的3个比较测试,初学者必读

    String是我们在JAVA中常用的类,对于其操作也十分的多,经常,我们会遇到对2个String的比较,我们应该怎么比较呢?

 

    首先我们来看一下3个测试用例:

 

   1.使用==比较,呵呵。

    public void test1(){
        String a=new String ("hello ");
        String b=new String ("hello ");
        System.out .println(a==b);
    }

 

    result: false

 

    2.使用equals()方法比较。最常用的。

    public void test1(){
        String a=new String ("hello ");
        String b=new String ("hello ");
        System.out .println(a.equals(b));
    }

 

    result:true

 

   3.还是使用==比较。略有不同

    public void test1(){
        String a="hello ";
        String b="hello ";
        System.out .println(a==b);
    }

 

    result:true

 

    经过试验,我们看到2,3都是返回true,但是为啥1却是false?

  

    首先,==比较对于String和其他一些非基本数据类来说是比较的地址,而不是比较其所含的值。真正做到值比较的是 equals()方法。一下它的具体实现

  

    通过String里char数组的比较来完成值的比较。

 

    最后为啥实验3会是true呢?为了提高效率,java为String类提供了串池 正如大家所看到的样,Test3中就使用了串池 。当你重新声明一个String型变量为 hello 时,将使用串池 里原来的那个 hello ,而不重新分配内存,也就是说,str2与str1将会指向同一块内存 。所以结果为true。 在Test1中使用了普通对象的声明方式,系统将会为a和b各分配一块内存 。所以结果为false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值