Java中堆内存和字符串池有什么区别? 在这个链接中提到:String s1 = "Hello"; String s2 = new String("Hello"); s1指向字符串池的位置,而s2指向堆内存的位置。
StringPool是JVM用来避免产生重复的String对象的区域。 那里的对象可以被“回收利用”,因此您可以(重新)使用它们,从而避免了太多内存的“浪费”…… 考虑以下示例:String s1 = "cat"; String s2 = "cat"; String s3 = new String("cat"); JVM聪明地发现对象s2将被分配为已经在内存中(并且被分配给对象"s1")的值“cat”,因此它不会创建新对象和浪费该新内存位置,而是将引用分配给为s1分配的同一内存。
当你使用 String s = "Hello"; Sting s2= "Hello" 时,s 和 s2 都得到了相同的副本。但是,当你使用 String s = new String("Hello"); String s2 = new String("Hello") 时,在堆中会有不同的副本分别对应于 s 和 s2。
""
还是new
?使用其中任何一种方法时,有什么需要注意的问题吗? - Quazi Irfan