Java 在不创建新实例的情况下为String类赋值

Java 在不创建新实例的情况下为String类赋值,java,string,Java,String,请原谅,如果这个问题已经被问过了,或者它已经很老了 字符串是一个类。我们能够在不创建新实例对象的情况下将值分配给字符串 比如stringsomestring=“Value” 如果不为字符串创建实例,这是如何工作的?是否可以创建用户定义的类来直接赋值而不创建新对象?字符串是一种特殊情况。字符串文本是在字符串池中创建的。在池中添加字符串后,如果将声明另一个具有相同值的字符串,则引用将指向池中的相同字符串 为了回答您的问题,您不能创建用户定义的类,也不能不使用new。只有在该类上只使用静态方法和字段,

请原谅,如果这个问题已经被问过了,或者它已经很老了

字符串是一个类。我们能够在不创建新实例对象的情况下将值分配给字符串

比如
stringsomestring=“Value”


如果不为字符串创建实例,这是如何工作的?是否可以创建用户定义的类来直接赋值而不创建新对象?

字符串是一种特殊情况。
字符串
文本是在
字符串池
中创建的。在池中添加字符串后,如果将声明另一个具有相同值的字符串,则引用将指向池中的相同字符串

为了回答您的问题,您不能创建用户定义的类,也不能不使用
new
。只有在该类上只使用静态方法和字段,然后使用
ClassName.StaticFieldOrMethod

字符串是一种特殊情况。
字符串
文本是在
字符串池
中创建的。在池中添加字符串后,如果将声明另一个具有相同值的字符串,则引用将指向池中的相同字符串

String str = "abc";
为了回答您的问题,您不能创建用户定义的类,也不能不使用
new
。只有在该类上只使用静态方法和字段,然后使用
ClassName.StaticFieldOrMethod

String str = "abc";
相当于:

 char data[] = {'a', 'b', 'c'};
 or
String str = new String(data);
对于用户定义的类,必须创建一个对象。 有关更多信息,请参阅文档:

相当于:

 char data[] = {'a', 'b', 'c'};
 or
String str = new String(data);
对于用户定义的类,必须创建一个对象。 有关更多信息,请参阅文档:

要了解字符串类如何工作,请参阅


要了解字符串类如何工作,请参阅

请参见:

字符串真的很特别

Java的设计者决定将基本类型保留在 面向对象的语言,而不是使一切都成为对象,所以 以提高语言的表现。原语被存储 在调用堆栈中,它需要更少的存储空间并且更便宜 操纵。另一方面,对象存储在程序中 堆,这需要复杂的内存管理和更多的存储空间。 出于性能原因,Java的字符串被设计为介于 基元和类


此外:

Java提供了一种特殊的机制来保存字符串文本 -在所谓的字符串公共池中

当您这样做时:

String myStr1 = "Hello";
String myStr2 = "Hello";
然后

myStr1==myStr2
true,因为它们都存储在池中(请阅读本文)

但如果构造新的字符串对象:

那么参考值就不相等了

我强烈建议你去参观博物馆。它说字符串是以不同的方式处理的,就像这样:)

看到了吗:

字符串真的很特别

Java的设计者决定将基本类型保留在 面向对象的语言,而不是使一切都成为对象,所以 以提高语言的表现。原语被存储 在调用堆栈中,它需要更少的存储空间并且更便宜 操纵。另一方面,对象存储在程序中 堆,这需要复杂的内存管理和更多的存储空间。 出于性能原因,Java的字符串被设计为介于 基元和类


此外:

Java提供了一种特殊的机制来保存字符串文本 -在所谓的字符串公共池中

当您这样做时:

String myStr1 = "Hello";
String myStr2 = "Hello";
然后

myStr1==myStr2
true,因为它们都存储在池中(请阅读本文)

但如果构造新的字符串对象:

那么参考值就不相等了


我强烈建议你去参观博物馆。它说字符串是以不同的方式处理的,就像这样:)

让我们试着用一个简单的程序来理解这一点

打包程序;
公共级圣堂武士{
公共静态void main(字符串[]args)引发异常{
字符串stringwithout new=“Test”;
字符串stringwithout new_temp=“Test”;
String stringWithNew=新字符串(“测试”);
字符串stringWithNew_temp=新字符串(“测试”);
如果(stringWithoutNew==stringWithoutNew_temp){
System.out.println(“这个有效!!”);
}
if(stringWithoutNew==stringWithNew){
System.out.println(“这不起作用!!”;
}
如果(stringWithNew==stringWithNew_临时){
System.out.println(“这也不行!!”;
}
}

}
让我们试着用一个简单的程序来理解这一点

打包程序;
公共级圣堂武士{
公共静态void main(字符串[]args)引发异常{
字符串stringwithout new=“Test”;
字符串stringwithout new_temp=“Test”;
String stringWithNew=新字符串(“测试”);
字符串stringWithNew_temp=新字符串(“测试”);
如果(stringWithoutNew==stringWithoutNew_temp){
System.out.println(“这个有效!!”);
}
if(stringWithoutNew==stringWithNew){
System.out.println(“这不起作用!!”;
}
如果(stringWithNew==stringWithNew_临时){
System.out.println(“这也不行!!”;
}
}

}
我想你的意思是,“比如
String something=“Value”
“String=“Value”;不行:)@chris-谢谢你的纠正。:-)我想你的意思是,“比如
stringsomething=“Value”
“String=“Value”;不行:)@chris-谢谢你的纠正。:-)