String
来声明一个字符串变量,并指定其值。即使String是非原始数据类型,我们也不必使用new关键字来定义字符串作为数组。有人能解释一下为什么String是非原始数据类型吗?
String
来声明一个字符串变量,并指定其值。即使String是非原始数据类型,我们也不必使用new关键字来定义字符串作为数组。字符串是非原始数据类型,因为只有类可以拥有方法,而原始数据类型则不行。在处理字符串时,需要调用许多函数,例如substring、indexof、equals和touppercase等。如果它不是一个类,这些操作都不可能实现。
此外,通过将字符串定义为类,使其不可变和最终化,可以通过允许池化来增强安全性和效率。
String
的 Javadoc 明确指出 String
是 Object
的子类,并且进一步说明 String.equals(Object)
重写了Object.equals(Object)
。
字符串字面值是由双引号括起来的零个或多个字符组成的。
此外,JLS-4.3.3. 字符串类 补充说:
字符串类的实例表示 Unicode 代码点序列。
String 对象具有常量(不变)值。
字符串字面值 (§3.10.5) 是对字符串类实例的引用。
字符串拼接操作符 + (§15.18.1) 会在结果不是编译时常量表达式 (§15.28) 时,隐式地创建一个新的 String 对象。
值得指出的是,数组也是 Object
类型,并且字符数组不是一个字符串。最后,如果一个 String
不是一个 Object
,那它就不能为 null
。
每次在其字符串池中分配值时,String都会创建一个对象。如果您创建了一个类似的对象,它将查找并引用该对象,如果该值不存在,则会再次创建一个新对象。更多地了解字符串池,您将自动了解其中的区别。
int [] a = {1, 2, 3};
。String s = "ab";
比起以下代码要简单得多:
char[] c = new char[2];
c[0] = 'a';
c[1] = 'b';
String s = new String(c);
String是Java对象而不是原始数据类型。String是java.lang包的一部分,在任何Java项目中默认导入。
无需定义char数组,只需使用String。
可能有重复: Java字符串导入
字符串是对象,是不可变的,这意味着您不能更改对象本身,但可以更改对对象的引用。
这就是字符串的工作方式。
String myStr = "test";
在Java中,String是一个对象,它存储实际的字符串值所在的位置。
当生成一个字符串数组时,您需要使用new
关键字,就像生成其他任何数组一样。
String[] text = new String[4]
这创建了四个String引用,指向计算机上文本所在的位置。此外,所有字符串默认为null
,因为在您赋予它们内存地址上的值之前,没有要存储的内容。
String str = “This is string literal”;
这是一个字符串字面量。当您声明像这样的字符串时,实际上是在调用String
上的intern()
方法。
此方法引用了一个内部字符串对象池。如果已经存在一个字符串值“这是字符串字面量”,那么str
将引用该字符串,不会创建新的String
对象。
String str = new String(“this is string created by new operator”);
这是一个字符串对象。即使“this is string created by new operator”已经存在于引用池中,JVM也被迫创建一个新的String
引用。