3

我们能做的:

String string = "ourstring";

但是我们不能为用户定义的类创建这样的对象:

UserClass uc="";

Java 是如何只允许我们直接为java.lang.String类设置值的?

4

4 回答 4

6

java.lang.String是一个特殊的班级。

随意阅读http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

它说

String 类表示字符串。Java 程序中的所有字符串文字,例如“abc”,都是作为此类的实例实现的。

...

Java 语言为字符串连接运算符 ( + ) 以及将其他对象转换为字符串提供了特殊支持。字符串连接是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,由 Object 定义并由 Java 中的所有类继承。有关字符串连接和转换的更多信息,请参阅 Gosling、Joy 和 Steele,Java 语言规范。

没有其他类具有 Java 语言的这种特殊支持。

你应该非常小心它的+特性:它被广泛讨论为对性能和内存不安全。

于 2013-04-18T16:27:25.380 回答
3

""String是用于从实习字符串池返回对象的语法糖。

将其视为例外而不是规则。常规对象分配需要采取形式

MyObject myObject = new MyObject();
于 2013-04-18T16:24:46.760 回答
1

有关此主题的详细信息,请查看在线 Javadoc:http ://docs.oracle.com/javase/6/docs/api/java/lang/String.html

Java 中的字符串很好用。它们获得了像原语一样使用的好处,但在内部是对象。有一个内部“内部字符串池”可以为您跟踪字符串对象。这样做主要是为了提高效率,但抽象足够简洁,您可以假装 String 只是一个原始类型,如 int 或 char。

请记住避免像大多数对象一样使用构造函数手动创建字符串!

于 2013-04-18T16:26:40.460 回答
0

实际上 String string="ourstring" 调用了 String 类的默认构造函数 new String(char value[])。如果您还看不到,建议您阅读 String.clss

this is String.class descipe /** *String类表示字符串。Java 程序中的所有 * 字符串文字,例如"abc",都作为此类的实例实现。*

* 字符串是常量;* 创建后它们的值不能更改。字符串缓冲区支持可变字符串。* 因为 String 对象是不可变的,所以它们可以被共享。例如: *

 
 * 字符串 str = "abc";
 *

* 等价于:*

 
 * 字符数据[] = {'a', 'b', 'c'};
 * 字符串 str = 新字符串(数据);
 *

* 下面是一些如何使用字符串的示例:*

 
 * System.out.println("abc");
 * 字符串 cde = "cde";
 * System.out.println("abc" + cde);
 * 字符串 c = "abc".substring(2,3);
 * 字符串 d = cde.substring(1, 2);
 *
*

*/

于 2013-04-18T16:38:24.583 回答