“equals“和“==“的区别(简单快速记忆)

简单概括常见的两类

比字符串时  equals比较的是内容,==比较地址

比较数值时  equals无法比较基本数据类型,==比较的是内容

 

 eg.比较数值时

 public static void main(String[] args){
      int num1=100;
      int num2=100;
      System.out.println(num1==num2);//ture,比内容都是100
      System.out.println(num1.equals(num2));//编译器显示错误,无法运行
   }

 eg.比较字符串时

 public static void main(String[] args){
    String s1="abcd";
    String s2="abcd";
    System.out.println(s1==s2);//true,比地址值,s1和s2都指向栈内的同一个地址值
      System.out.println(s1.equals(s2));//true,比内容都是abcd
   }

new对象,开辟新的堆 

  public static void main(String[] args){
    String s1="abcd";
    String s2="abcd";
    System.out.println(s1==s2);//true
      System.out.println(s1.equals(s2));//true

       String s3 = new String("abcd");
       String s4 = new String("abcd");
       System.out.println(s3 == s4);        //false,比地址值:s3和s4在堆内存中的地址值不同
       System.out.println(s1 == s3);        //false,比较地址值:s1在栈中,s3在堆中,两者的内存中的地址值不同
       System.out.println(s3.equals(s4));   //ture,equals比较的是内容,s3和s4的内容相同
   }

 

  1. s1 和 s2的关系:
    • s1s2 都是通过字符串字面值创建的,它们在栈内存中具有相同的引用地址。
    • 因为它们都具有相同的值 "abcd",Java 字符串常量池会将它们合并为同一个字符串对象,所以它们的内存地址相同。
  2. s3s4 的关系:

    • s3s4 都是通过使用 new 关键字显式创建的字符串对象,因此它们在堆内存中分别被创建。
    • 尽管它们具有相同的值 "abcd",但由于使用了 new 关键字,它们在堆内存中有不同的内存地址。

总结:

  • s1s2 具有相同的栈内存地址,因为它们共享相同的字符串常量。
  • s3s4 分别位于堆内存中,它们具有不同的堆内存地址,因为它们通过 new 创建的对象是独立的。
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值