String 直接赋值和new 对象

xiaoxiao2025-05-13  33

用一个简单的例子表述Stirng直接赋值和new对象的区别 String a = new String(“a”); String b = new String(“a”); //此处是比较的是对象引用的地址 System.out.println(“比较内存地址是否相等”); System.out.println(a==b);(此处结果为false) //此处比较的是字符串的值 System.out.println(“比较值是否相等”); System.out.println(a.equals(b));(此处结果为true) 说明: new出来的是对象,是要在堆中开辟内存,有相应的地址的 但是这里面还有需要注意的地方。那就是在定义a的时候,用new关键字在堆内存开辟一个内存区域,但是同时 如果常量池里面没有 “a”,那么它也会往常量池存放“a”。也就是说new的时候,实际是再内存中开辟两个地方存放“a”,一个在堆内存上,一个在常量池。 //直接赋值的是存在常量池中的 String e = “a”; String f = “a”; System.out.println(“比较值是否相等”); System.out.println(e.equals(f));(此处结果为true)

说明:直接赋值时会首先检查字符串常量池中是否存在该字符串对象,如果已经存在,那么就不会在创建字符串常量池中再创建了,直接返回该字符串在字符串常量池中内存地址,如果该字符串还不存在字符串常量池中,那么就会在字符串常量池中先创建该字符串的对象,然后再返回。 参考链接:https://blog.csdn.net/weililansehudiefei/article/details/71224029https://blog.csdn.net/old_memories/article/details/78136602 https://blog.csdn.net/old_memories/article/details/78136602

转载请注明原文地址: https://www.6miu.com/read-5030057.html

最新回复(0)