Java 单字符串

Java 单字符串,java,Java,我的观点是,直到今天,像“c”这样的文本创建了字符串对象。今天我听说Java没有为单个字符串创建对象。是这样吗?它是否将该文本存储为字符?“c”是字符串文本。它表示一个字符串,就像“foo”表示一个字符串 对于单个字符字符串文本(甚至是0字母字符串文本”)没有特殊处理 无论是谁告诉你它被区别对待,要么是a.)错误,要么是b.)谈论不同的东西(例如,有特殊处理的库)。“c”将创建一个字符串'c'将创建一个字符不,这是错误的。即使是“”,也会创建一个字符串对象。 但是,如果键入'c',则得到的是字符

我的观点是,直到今天,像
“c”
这样的文本创建了
字符串
对象。今天我听说Java没有为单个字符串创建对象。是这样吗?它是否将该文本存储为
字符

“c”
字符串
文本。它表示一个
字符串
,就像
“foo”
表示一个
字符串

对于单个字符
字符串
文本(甚至是0字母
字符串
文本”)没有特殊处理

无论是谁告诉你它被区别对待,要么是a.)错误,要么是b.)谈论不同的东西(例如,有特殊处理的库)。

“c”
将创建一个字符串<代码>'c'将创建一个字符

不,这是错误的。即使是
“”
,也会创建一个
字符串
对象。
但是,如果键入
'c'
,则得到的是字符而不是
字符串
对象。

Java确实会创建字符串实例,即使是单个字符串。下面打印
java.lang.String

public class Test{
    public static void main(final String[] args){
        System.out.println("c".getClass().getName());
    }
}
“c”
确实创建了一个对象。但是,如果您在源代码中的某个地方再次分配文本,它将不会创建新对象,而是引用创建的第一个字符串对象

例如:

String s1 = "abc";   //creates the String object
String s2 = "abc";   //references the same object as s1
s1和s2都被分配了相同的对象,并且==可以工作


您可以在这里阅读更多内容:

可能意思是创建了引擎盖下的字符(不知道Java是如何工作的,但我认为这个概念在某种程度上适用于字符串)

字符串
将字符存储为
字符[]
,因此最有可能
“c”
将表示为
新字符[]{'c'}
字符串
对象中

由于
String
类是
final
,这意味着在
charc
字段中没有存储单个字符串的子类


此外,对于单个字符
String
char
,没有自动装箱/取消装箱的概念——据文档所述,因此可以安全地假设单个字符串的存储方式与任何其他类型的字符串类似。

与编程中的大多数内容一样,请查看source->java.lang.String


所有字符串都是java.lang.String的实例,没有特殊情况。每个java.lang.String都包含一个char[]和一些整数,用于保存开始和结束索引。请注意,char[]在Strign实例之间共享,例如当一个实例执行字符串时。substring()原始char[]未克隆或复制它是共享的,但开始/结束索引会更新。

是的,它显然会返回字符串,因为
(双引号)用于字符串,
(单引号)用于字符。这对于某些操作是正确的,即子字符串(..)、子序列(..)和trim(),其中生成的字符串将在引擎盖下使用相同的字符[]。但我不知道这会如何影响字符串文字。@Woot4Moo不,这是真的。默认情况下,文字字符串是内部的。@Woot4Moo,我同意Sfussengerger的说法,默认情况下,所有字符串文字都是内部的。intern()的文档澄清:这仍然是非常危险和糟糕的。建议在字符串比较时始终使用.equals。如果我将字符串放入char数组中,将原始字符串设为null,然后从数组中重新生成字符串,这是使==失败的一种方法。是的,我意识到这与此不同,但这就是为什么应该使用.equalsAgreed,通常应改为使用equals()进行比较。这是一个有趣的概念,将单个字符串自动装箱/解装箱到
char
…告诉告诉您的人去阅读Java语言规范中有关文本的部分。字符文本和字符串文本: