2011-06-24 36 views
7

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

+3

听说过吗?听说哪里? – bmargulies

+0

这将是一个有趣的概念,将单字符字符串自动装箱/取消装箱到char字符...... – Nick

+0

告诉告诉你,要阅读Java语言规范中关于文字的部分。字符文字和字符串文字:http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#100960 –

回答

5

"c"String文字。它代表String,正如"foo"代表String

没有特殊处理单字符String文字(甚至没有0字母String文字"")。

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

8

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

13

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

6

即使对于单个字符串,Java也会创建一个字符串实例。下面的打印java.lang.String

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

是的,它显然确实返回字符串,因为'“”'(双引号)是字符串和''''(单引号)用于字符 – Woot4Moo

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/

+0

错误。 ==只有在你使用String.intern – Woot4Moo

+0

@ Woot4Moo否的情况下才有效,这是真的。文字字符串是默认实现的。 – sfussenegger

+0

@ Woot4Moo请参阅https://gist.github.com/1044768 – sfussenegger

1

也许什么意思是,在发动机罩下方flyweights创建(如何说不上来这工作与Java,但我相信,这个概念是在一定程度上为字符串employeed)

+0

对于某些操作,即子字符串(..),subSequence(..)和trim(),其结果字符串将在引擎盖下使用相同的char []。我不明白这可能会如何影响字符串文字。 – sfussenegger

0

String存储字符作为一个char[],因此最有可能"c"将被表示为String对象内new char[] { 'c' }

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

另外,对于单字符Stringchar没有自动装箱/取消装箱的概念 - 就文件而言,所以假定单字符字符串存储类似于任何其他类型是安全的的字符串。

0

与编程看看源最多的事 - > java.lang.String中。

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

相关问题