• ==和equals在比较字符串时候的区别


    作为一个菜鸟  之前一直迷茫 都说比较字符串要用equals()方法  但是有时候用==貌似也可以  话不多说  先来一个例子

    public static void main(String[] args) {
        String str1="str";
        String str2="str";
        System.out.println(str1==str2);//返回true

      
    System.out.println(str1.equals(str2));//返回true
    }

    返回一个 true

     再来一个用==不行的例子

    public static void main(String[] args) {
        String str1=new String("str");
        String str2=new String ("str");
        System.out.println(str1.equals(str2));//返回true
        System.out.println(str1==str2);//返回false
    
    }

     经过比较得知  new()出来的字符串不能用==比较

    有以下两种原因 

      1、equals()方法比较的是两个对象值   而==比较的两个引用是否指向同一个对象   有些同学要问了  为什么直接=字符串和new()字符串难道不同吗?  对的 第二点就是new和=的区别

      2、用=时 会在字符常量串常量池中创建 如 string  s="123"; 字符串常量池不属于堆也不属于栈  这样就会在字符串常量池创建“123”(如果字符串常量池中已经有“123” 就把s引用指向它)。再创建一个string s1=“123”;

        会把s1的引用指向已经存在的“123”;而不会再创建一个 这样s和s1的引用都是一样的 用==也可以判断出来

        用new()时  不管字符串常量池中有没有  都到从堆内存中开辟一块空间存放 new一次 开辟一次 所以 String str1=new String("str"); String str2=new String ("str");是不同的两块空间 所以引用也就不相同的

        ==只会判断两个引用是否指向同一个对象(也就是同一块内存地址) 所以这时候用==是false

     结论

      1、==用于比较两个引用是否指向同一个对象   equals用于比较两个对象是否相等

      2、由于字符串特殊 在字符串常量池中的字符串可以使用==也可以使用equals 推荐不管哪种方式 只要是比较字符串就用equals

  • 相关阅读:
    mybatis <=或这个>=提示错误Tag name expecte问题解决
    Navicat 设置自增长初始值
    mysql 时间与字符串相互转换
    jquery 动态控制显隐
    mysql 查询常见时间段数据
    jquery 取得select选中的值
    java8 运算语法集
    springboot 单元测试
    idea 自动生成并跳转单元测试
    限制页面被pc端访问
  • 原文地址:https://www.cnblogs.com/guoyafenghome/p/8542097.html
Copyright © 2020-2023  润新知