单字符串

时间:2011-06-24 12:47:26

标签: java

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

8 个答案:

答案 0 :(得分:13)

不,这是错的。即使"",也会创建一个String对象。 但是,如果键入'c',则会得到一个char而不是String对象。

答案 1 :(得分:8)

"c"将创建一个字符串。 'c'将创建一个char

答案 2 :(得分:6)

Java确实为单个字符串创建了一个字符串实例。以下打印java.lang.String

public class Test{
    public static void main(final String[] args){
        System.out.println("c".getClass().getName());
    }
}

答案 3 :(得分:5)

"c"String字面值。它代表String"foo"代表String

没有对单字符String文字进行特殊处理(甚至不是0字母String文字"")。

无论谁告诉你,它的处理方式不同,要么是错误的,要么是b。)谈论不同的事情(例如,有特殊待遇的图书馆)。

答案 4 :(得分:1)

"c"会创建一个对象。但是,如果在源代码中的某处再次分配文字,则不会创建新对象,而是引用创建的第一个字符串对象。

例如:

String s1 = "abc";   //creates the String object
String s2 = "abc";   //references the same object as s1

s1和s2都分配了相同的对象,==可以工作。

您可以在此处阅读更多内容:http://javatechniques.com/blog/string-equality-and-interning/

答案 5 :(得分:1)

也许是什么意思是引擎盖下flyweights被创建(不知道它如何与Java一起工作,但我认为这个概念在某种程度上适用于字符串)

答案 6 :(得分:0)

String将字符存储为char[],因此很可能"c"将在new char[] { 'c' }对象中表示为String

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

此外,对于单个字符Stringchar,没有自动装箱/取消装箱的概念 - 只要记录在案,因此可以安全地假设单字符字符串存储类似于任何其他类型的String。

答案 7 :(得分:0)

与编程中的大多数事情一样,请查看源代码 - > java.lang.String中。

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