Java---理解字符串的创建方式

1.认识字符串

学了类与对象之后,字符串不再是我们眼中双引号引起来的数据了,它是String类中的对象,String是一种引用类型,存储对象的地址,有c语言中的指针类似效果。

2.创建字符串的三种方式
在这里插入图片描述
下面我们通过一幅图展现三者不同:
在这里插入图片描述
①直接创建:"hello"为字符串字面常量值,它存在于堆中的常量池中,str存在于栈上,我们可以看到,"Hello"的地址为999,str中保存的是999,因此可以说str指向常量池中的"hello"对象。

②new一个字符串对象:先在堆上new一个对象,那么hello怎么来呢?
在这里插入图片描述
在这里插入图片描述
hello是通过value拿到的,那么value是什么呢?我们可以看到value是数组的引用,实际上在new这个对象时候,里面有个数组value,value指向常量池中的hello,显然我们可以看出str2的存储的地址是堆上new出的对象地址888。

③通过字符数组创建:堆上创建数组,此时栈上value指向堆上数组,然后在堆上new对象,我们发现里面有个value数组,该value指向原来数组。我们发现str3存储的地址是堆上new出对象的地址777。
在这里插入图片描述
3.字符串比较相等

现在让我们比较字符串是否相等,非常容易了,由于字符串是引用类型,当字符串保存的对象地址相同时,认为字符串相等。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
打印下这六个字符串地址哈希值一探究竟,这是最真实的表现了噢
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值