zoukankan      html  css  js  c++  java
  • 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对象是不是同一个对象,因为我们一般使用中,只关心两个字符串内容相同与否,而不会关心是不是同一个对象。

  • 相关阅读:
    Java解析XML汇总
    java百度地图api轨迹
    java百度地图api轨迹
    javascript百度和高德地图api轨迹回放
    javascript百度和高德地图api轨迹回放
    偷影子的人
    偷影子的人
    SharePoint 2010 的企业级搜索技术文章
    Export Farm Solution wsp Files SharePoint 2007 and 2010
    Configuring My Site in SharePoint 2010
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256685.html
Copyright © 2011-2022 走看看