在Java中,我们可以直接使用String
来声明字符串变量名并指定其值。我们不必使用new关键字将字符串定义为数组,即使String是非基本数据类型。
有人可以解释为什么String是非原始数据类型吗?
答案 0 :(得分:17)
String是非原始的,因为只有class可以有方法。原始不能。并且在处理像substring,indexof,equals,touppercase时,String需要调用许多函数。没有上课就不可能实现。
同样,class允许通过允许池化来使字符串成为不可变的和最终的,以提高安全性和效率。
答案 1 :(得分:10)
String
Javadoc清楚地表明String
是Object
的子类;并进一步String.equals(Object)
覆盖Object.equals(Object)
。
字符串文字由用双引号括起来的零个或多个字符组成。
此外,JLS-4.3.3. The Class String添加了
类的实例String表示Unicode代码点的序列。
String对象具有常量(不变)值。
字符串文字(§3.10.5)是对类String实例的引用。
值得指出的是,数组也是Object
(s)和An Array of Characters is Not a String。最后,如果String
不是Object
,则不能null
。
答案 2 :(得分:3)
是String是Java中的对象。可以将类似用于原语的事实与
并不矛盾请参阅 - Strings are objects in Java, so why don't we use 'new' to create them?
答案 3 :(得分:2)
每次在字符串池中分配值时,String都会创建一个Object。 每次如果你创建一个类似的对象,它将寻找并引用,如果该值不存在,它将再次创建一个新的。详细了解字符串池,您将自动了解其中的差异。
答案 4 :(得分:1)
String是object,是不可变的,这意味着你不能改变对象本身,但你可以改变对象的引用。
这就是String的工作原理
String myStr = "test";
像往常一样,创建一个名为" test"的字符串。并为其指定一个参考" myStr"。
这里要注意的重点是,虽然String对象是不可变的,但它的引用变量不是。
答案 5 :(得分:1)
我认为你混淆了'原始'和'文字'。基元是不是对象的数据类型。文字是描述数据类型的位模式的便捷方式。例如-1表示int的位模式0xFFFFFFFF,'a'表示16位(0x0061)的小写A的unicode代码点。文字不限于描述原始数据类型。您可以描述一个数组。例如,int[] a = {1, 2, 3};
。
字符串文字只是一种描述附加了某些方法的不可变字符数组的方法。文字是用于描述本来会非常复杂的东西的语法糖。例如:
String s = "ab";
比以下简单得多:
char[] c = new char[2];
c[0] = 'a';
c[1] = 'b';
String s = new String(c);
答案 6 :(得分:1)
在Java中,String是一个对象,用于存储实际"值"的位置。字符串所在的位置。
在制作字符串数组时,您需要使用new
关键字,就像制作其他任何数组一样。
String[] text = new String[4]
这创建了四个字符串引用,可将计算机引导至文本所在的位置。此外,所有字符串默认值为null
,因为除非您为它们提供存储在内存地址的值,否则无需存储任何内容。
答案 7 :(得分:1)
答案 8 :(得分:0)
String是Java对象,而不是原始数据类型。 String是java.lang包的一部分,默认情况下在任何java项目中导入该包。
不需要定义char数组,只需使用String。
可能重复:Java String import
答案 9 :(得分:0)
这是字符串文字。当您声明这样的字符串时,实际上是在String上调用intern()方法。此方法引用内部字符串对象池。如果已存在字符串值“This is string literal”,则str将引用该字符串,并且不会创建新的String对象。
这是字符串对象。在这种方法中,JVM被强制创建一个新的字符串引用,即使“这是由new operator创建的字符串”也在引用池中。
答案 10 :(得分:0)