我们能做的:
String string = "ourstring";
但是我们不能为用户定义的类创建这样的对象:
UserClass uc="";
Java 是如何只允许我们直接为java.lang.String
类设置值的?
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 语言的这种特殊支持。
你应该非常小心它的+
特性:它被广泛讨论为对性能和内存不安全。
""
String
是用于从实习字符串池返回对象的语法糖。
将其视为例外而不是规则。常规对象分配需要采取形式
MyObject myObject = new MyObject();
有关此主题的详细信息,请查看在线 Javadoc:http ://docs.oracle.com/javase/6/docs/api/java/lang/String.html
Java 中的字符串很好用。它们获得了像原语一样使用的好处,但在内部是对象。有一个内部“内部字符串池”可以为您跟踪字符串对象。这样做主要是为了提高效率,但抽象足够简洁,您可以假装 String 只是一个原始类型,如 int 或 char。
请记住避免像大多数对象一样使用构造函数手动创建字符串!
实际上 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); *
*/