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.字符串比较相等
现在让我们比较字符串是否相等,非常容易了,由于字符串是引用类型,当字符串保存的对象地址相同时,认为字符串相等。
打印下这六个字符串地址哈希值一探究竟,这是最真实的表现了噢