java中带有new关键字和直接赋值的字符串

use*_*736 2 java string

String s="hi";
String s1=new String("hi");
Run Code Online (Sandbox Code Playgroud)

从内存的角度来看,s和s1存储在哪里?无论是在堆内存还是堆栈中。

s 指向“hi”,s1 指向 hi 所在的内存位置?

请帮忙?

Pra*_*kar 5

考虑以下

 String s = "hi";
 String s1 = new String("hi");
Run Code Online (Sandbox Code Playgroud)

变量s将引用hi从字符串常量池引用的字符串文字,如果还有更多变量s2 = "hi",例如 ,则ss2将引用同一个对象。

String s1 = new String("hi"); 
Run Code Online (Sandbox Code Playgroud)

这将在运行时创建一个新的字符串。

在第一种情况下,所有 strnig 文字都是在 JVM 中加载类时创建的。在秒种情况下,字符串对象是在new String()执行时创建的。您可以在以下链接找到有关字符串常量池的好教程

http://www.thejavageek.com/2013/06/19/the-string-constant-pool/