在Java中,为什么String是非原始数据类型?

时间:2014-12-16 17:30:47

标签: java string

在Java中,我们可以直接使用String来声明字符串变量名并指定其值。我们不必使用new关键字将字符串定义为数组,即使String是非基本数据类型。

有人可以解释为什么String是非原始数据类型吗?

11 个答案:

答案 0 :(得分:17)

String是非原始的,因为只有class可以有方法。原始不能。并且在处理像substring,indexof,equals,touppercase时,String需要调用许多函数。没有上课就不可能实现。

同样,class允许通过允许池化来使字符串成为不可变的和最终的,以提高安全性和效率。

答案 1 :(得分:10)

String Javadoc清楚地表明StringObject的子类;并进一步String.equals(Object)覆盖Object.equals(Object)

JLS-3.10.5. String Literals指定

  

字符串文字由用双引号括起来的零个或多个字符组成。

此外,JLS-4.3.3. The Class String添加了

  

类的实例String表示Unicode代码点的序列。

     

String对象具有常量(不变)值。

     

字符串文字(§3.10.5)是对类String实例的引用。

     

字符串连接运算符+(§15.18.1)在结果不是编译时常量表达式(§15.28)时隐式创建新的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)

  1. 字符串是字符数组
  2. 原始数据类型具有固定数据类型的限制
  3. 但是字符串的大小各不相同,这就是字符串不是原始字符串的主要原因
  4. Java中的字符串本身就是一个类,并且具有自己的方法来操作和操作String类的对象
  5. 字符串具有不可变的特点。

答案 8 :(得分:0)

String是Java对象,而不是原始数据类型。 String是java.lang包的一部分,默认情况下在任何java项目中导入该包。

不需要定义char数组,只需使用String。

可能重复:Java String import

答案 9 :(得分:0)

String str =“这是字符串文字”;

这是字符串文字。当您声明这样的字符串时,实际上是在String上调用intern()方法。此方法引用内部字符串对象池。如果已存在字符串值“This is string literal”,则str将引用该字符串,并且不会创建新的String对象。

String str = new String(“这是由new operator创建的字符串”);

这是字符串对象。在这种方法中,JVM被强制创建一个新的字符串引用,即使“这是由new operator创建的字符串”也在引用池中。

答案 10 :(得分:0)

原始数据类型是没有方法的类型。而字符串有方法,例如大写,小写等。在intellij中,您可以检查是否有方法。

这是显示 (int) 的方法,它不显示任何方法(它是原始的 )

此图像显示了显示方法的(字符串)(它不是原始的) This image is showing the (String) which shows methods (it is not primitive)