• String类型中"=="和"equals"的区别


    "=="比较的是两个字符串的内存地址。  "equals"比较的是两个字符串的实际值。

    例子1.

    String s1="abc";
    String s2="abc";
    if(s1.equals(s2)){
        System.out.println("两个字符串值相等")
    }
    if(s1==s2){
         System.out.println("两个字符串指向同一个内存地址");
    }

    此时输出:两个字符串值相等

         两个字符串指向同一个内存地址

    why:当给s2赋值abc时,s2会自动去寻找有没有abc这个值得字符串。如果有,会copy  s1(包含内存地址)。如果没有,再创建一个新内存地址。

    例子2.

    String s1="abc";
    String s2=new String("abc")
    if(s1.equals(s2)){
        System.out.println("两个字符串值相等")
    }
    if(s1==s2){
         System.out.println("两个字符串指向同一个内存地址");
    }

    此时输出:两个字符串值相等

    why:s2创建了一个新对象,值为abc,与s1不再是同一个内存地址,所以只输出:两个字符串相等

    例子3.

    String s1="abc";
    String s2=new String()
    s2="abc";
    if(s1.equals(s2)){
        System.out.println("两个字符串值相等")
    }
    if(s1==s2){
         System.out.println("两个字符串指向同一个内存地址");
    }

    此时输出:两个字符串值相等

         两个字符串指向同一个内存地址

    why: 虽然new了一个新对象,但没有在此时给值,后来赋值的时候,仍是copy 了s1的内存地址。

    例子4.

    String s1="abc";
    String s2=new String("abc");
    s2=s2.intern();
    if(s1.equals(s2)){
        System.out.println("两个字符串值相等")
    }
    if(s1==s2){
         System.out.println("两个字符串指向同一个内存地址");
    }

    此时输出:两个字符串值相等

          两个字符串指向同一个内存地址

    why: 调用了intern()方法,此时s2先去找有没有abc,如果有,copy 内存地址,如果没有,创建新的。

  • 相关阅读:
    剑指offer-面试题59_2-队列的最大值-队列
    剑指offer-面试题59_1-滑动窗口的最大值-数组
    剑指offer-面试题64-求1+2+...+n-发散思维
    客车网上售票系统之前台订票、退票、改签管理和前台留言管理
    客车网上售票系统之票务管理
    客车网上售票系统项目之留言管理和新闻管理
    客车网上售票系统之用户管理
    客车网上销售系统需求分析及项目燃尽图
    MyBatis-plus逻辑删除
    项目启动注释模板
  • 原文地址:https://www.cnblogs.com/xiao-ran/p/9829795.html
Copyright © 2020-2023  润新知