Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SCP内存位置中的对象_Java_String - Fatal编程技术网

Java SCP内存位置中的对象

Java SCP内存位置中的对象,java,string,Java,String,对于上面的测试,会创建一个对象,但是如果我在不使用new关键字的情况下为字符串变量分配一个字符串文字,那么在SCP中为该变量创建的内存会被视为一个对象吗?如果是这样,没有new关键字,这怎么可能发生 String s = new String("test"); 我的意思是“test”会被视为一个对象吗 String s = "test"; 这里的s将指一个插入的字符串对象。这意味着,字符序列“test”将存储在中心位置,并且每当再次使用相同的文本“test”时,JVM将不会创建新的字符串对象

对于上面的测试,会创建一个对象,但是如果我在不使用
new
关键字的情况下为字符串变量分配一个字符串文字,那么在SCP中为该变量创建的内存会被视为一个对象吗?如果是这样,没有
new
关键字,这怎么可能发生

String s = new String("test");
我的意思是
“test”
会被视为一个对象吗

String s = "test";
这里的s将指一个插入的字符串对象。这意味着,字符序列“test”将存储在中心位置,并且每当再次使用相同的文本“test”时,JVM将不会创建新的字符串对象,而是使用缓存字符串的引用

String s = "test";
两个字符串s,s1都提供了字符串对象,但它们之间有细微的区别。当您使用new()操作符创建字符串对象时,它总是在堆内存和SCP中创建一个新对象。另一方面,如果您使用字符串文字语法(例如“test”)创建对象,它可能会从字符串池(Perm gen space中的字符串对象缓存,现在在最近的Java版本中被移动到堆空间)返回一个现有对象(如果它已经存在)。否则,它将创建一个新的字符串对象并放入字符串池中以供将来重用,因此在本例中,我们有:

String s1 = new String("test");

当然,例如,“test”.trim()将返回“test”。不知道你在说哪个“scp”,谢谢你的回复。但正如在
String s1=new String(“test”)
中一样,“test”将是String类的对象,在哪个类中将为
String s=“test”
创建对象“test”?现在我根据您的问题更新了答案。
s1 == s // is false
s1.equals(s) // is true