Java中 String s = new String(“hello“)和String s = “hello“的区别

区别:

String s1 = new String(“hello”)会创建2个对象,首先是new String(“hello”)会创建一个字面量对象保存到字符串常量池中,然后在堆内存中申请内存存储String类型的对象,地址值赋给引用 s1;s1会去方法区的常量池中找有没有“hello”,如果有的话会将s1的引用地址指向常量池的“hello”

String s = “hello”由于上述过程,常量池中已经存储了一个hello,此时只需要将hello所在空间的地址值赋给引用 s;

因为   ==   比较的是内存地址是否相同,s1和s是在堆内存中的两个不同地址的引用,所以结果是false

此后又新建s2对象并赋值s,相当于把s复制一份取名s2;因为s2指向的也是常量池中的“hello”,所以s2的引用地址和s的地址一样

因为.equals是比较两个字符串内容是否相同,所以s.equals(s1)为true

回顾:

==,比较运算符,可以比较基本类型,也可以比较引用类型。

  • 比较基本类型时,比较的是值是否相同
  • 比较引用类型时,比较的是地址值是否相同

equals方法,是Object类中的方法,只能比较引用类型

  • 没有重写时,比较的是地址值
  • 重写后,一般比较的是引用所指的对象的内容

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值