zoukankan      html  css  js  c++  java
  • equals和“==”的区别

    “==”是比较两个变量本身的值,对象在内存的首地址。
    首地址:对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,通过这个首地址就能找到该对象,进而找到该对象的各个属性

    "equals()"用来比较字符串中的包含的内容是否相同
    String s1,s2,s3 = "abc", s4 ="abc" ;
    s1 = new String("abc");
    s2 = new String("abc");
    System.out.println("s1==s2:"+(s1==s2));//false
    System.out.println("s1==s3:"+(s1==s3));//false
    System.out.println("s3==s4:"+(s3==s4));//true
    System.out.println("s1.equals(s2):"+(s1.equals(s2)));//true
    System.out.println("s1.equals(s3):"+(s1.equals(s3)));//true
    System.out.println("s3.equals(s4):"+(s3.equals(s4)));//true
    s3 = "abc"  //在常量池中创建对象  abc
    s1 = new String("abc");   //在堆中创建new String()对象   但是因为abc已经在常量池中存在,所以不需要在常量池中创建对象
                              //所以   s1==s3   比较的是堆中的对象和常量池中的对象,这不是一个对象

    StringBuffer sb1 = new StringBuffer("abc");
    StringBuffer sb2 = new StringBuffer("abc");
    System.out.println(sb1==sb2);
    System.out.println(sb1.equals(sb2));
    
    StringBuilder sb3 = new StringBuilder("abc");
    StringBuilder sb4 = new StringBuilder("abc");
    System.out.println(sb3==sb4);
    System.out.println(sb3.equals(sb4));

    原因:StringBuilder和StringBuffer类中没有重写equals这个方法,因此这个方法来自于Object

    Object类中的equals的方法是用来比较地址的,所以是false。
    Test t1 = new Test();
    Test t2 = new Test();
    System.out.println(t1==t2);
    System.out.println(t1.equals(t2));
    t1 = t2;
    System.out.println(t1==t2);
    System.out.println(t1.equals(t2));

    前面的两个false相当于比较内存地址,false不言而喻
    执行 t1=t2相当于 t1指向了t2的内存地址,两个内存地址一样
    所以两个都是true
    • equals方法对于字符串来说是比较的内容,对于非字符串来说,是比较的内存地址
    • ==比较对象的内存首地址
    equals和==的区别:
    1. 如果是基本数据类型,只能用==,不能用equals
    2. 对于基本类型的包装类型,比如Boolean、Character、Byte、Short、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的

    只要是没有重写equals类中,来用equals来比较,那就是来比较内存地址的

     
  • 相关阅读:
    spring学习笔记---数据库事务并发与锁详解
    VIM
    Linux命令总结(转)
    js实现配置菜品规格时,向后台传一个json格式字符串
    js 子窗口调用父框框方法
    springMVC 的拦截器理解
    java 使用poi 导入Excel 数据到数据库
    导入jeesite 项目
    JS动态添加删除html
    在Linux CentOS 下安装JDK 1.8
  • 原文地址:https://www.cnblogs.com/xiexiaofei/p/14116120.html
Copyright © 2011-2022 走看看