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