这题选什么?java的题
我来给你个满意的解释,记得采纳
首先有个字符串池(String Pool)的概念。 这个不懂你百度吧,我就不解释了。我按照代码顺序给你讲解。
String str1 = “Hello”;(采用的是字面值方式赋值)
首先查找字符串池是否存在“Hello”这个对象,如果不存在,则在字符串池中创建一个“Hello”对象,然后将字符串池中的这个“Hello”对象的地址返回,赋给引用变量str1,然后str1就会指向字符串池中的这个“Hello”对象
如果存在,则不创建任何对象,直接将字符串池中的这个“Hello”对象地址返回,赋给str1引用。
2.String str2 = new String("Hello");
首先在字符串池中查找有没有“Hello”这个字符串对象,如果有,则不在字符串池中再去创建“Hello”这个对象了,直接在堆中(heap)中创建一个“Hello”字符串对象,然后将堆中的这个“Hello”对象的地址返回来,赋给str2引用,导致str2指向了堆中创建的这个“Hello”字符串对象。
如果没有,则首先在字符串池中创建一个“Hello”对象,然后再在堆中(heap)创建一个“Hello”对象,然后将堆中的这个“Hello”对象的地址返回来,赋给str2引用,str2就会指向堆中所创建的这个“Hello”对象。
对于String类的equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致
“==”判断的是两个引用是否指向同一个对象,即地址是否相同。 (Object类的equals()方法等价于“==”)
请说
你看吧
equals 就不用说了, 只要值对就对
new String() 其实有误导作用, 因为值不是写在 new String("Hello") 里面,是str1 = "Hello"
java 中赋值字符串会有一个缓存, 如果赋值过一次,下一次就一直用这个值,也就是内存地址一样的。 也就是说:
str=“Hello” str1 ="Hello" “Hello”其实也是一对象地址,不会新建的。 而 new String(“Hello”) 会新建 ,别被 new String() 误导。