在Java中,为什么字符串是非基本数据类型?

在Java中,为什么字符串是非基本数据类型?,java,string,Java,String,在Java中,我们可以直接使用String来声明字符串变量名并指定其值。我们不必使用new关键字将字符串定义为数组,即使字符串是非基本数据类型 有人能解释一下为什么字符串是非原始数据类型吗?是的,字符串是Java中的一个对象。它可以像原语一样使用这一事实并不矛盾 请参阅-字符串是Java对象,而不是原始数据类型。 字符串是java.lang包的一部分,默认情况下在任何java项目中导入该包 无需定义字符数组,只需使用字符串即可 可能重复:字符串是对象,是不可变的,这意味着您不能更改对象本身,但可

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


有人能解释一下为什么字符串是非原始数据类型吗?

是的,字符串是Java中的一个对象。它可以像原语一样使用这一事实并不矛盾


请参阅-

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

无需定义字符数组,只需使用字符串即可


可能重复:

字符串是对象,是不可变的,这意味着您不能更改对象本身,但可以更改对对象的引用

这就是字符串的工作原理

String myStr = "test";
这通常会创建一个名为“test”的字符串,并为其分配一个引用“myStr”

这里需要注意的重要一点是,虽然String对象是不可变的,但它的引用变量不是。

Javadoc明确指出
String
对象的子类;以及进一步的否决

指定

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

此外,他补充道

类字符串的实例表示Unicode代码点的序列

字符串对象具有常量(不变)值

字符串文本()是对类字符串实例的引用

当结果不是编译时常量表达式()时,字符串连接运算符+()隐式创建新的字符串对象


还值得指出的是,数组也是
对象
,并且。最后,如果
字符串
不是
对象
,它就不可能是
null

字符串是非原语的,因为只有类可以有方法。原始不能。处理字符串时需要调用许多函数,如substring、indexof、equals和touppercase。如果不让它成为一流的,那是不可能的


类还可以使字符串不可变和最终,通过允许池来提高安全性和效率。

我认为您混淆了“primitive”和“literal”。基元是不是对象的数据类型。文字是描述数据类型位模式的一种方便方式。例如,-1描述int的位模式0xFFFFFFFF,“a”描述16位小写字母a的unicode码点(0x0061)。文字不限于描述基本数据类型。您可以描述一个数组。例如,
int[]a={1,2,3}

字符串文字只是描述附加了某些方法的不可变字符数组的一种方式。字面意思是用来描述一些本来会非常复杂的东西的语法糖。例如:

String s = "ab";
这比:

char[] c = new char[2];
c[0] = 'a';
c[1] = 'b';
String s = new String(c);

在Java中,String是一个对象,它存储字符串的实际“值”所在的位置

创建字符串数组时,确实需要使用
new
关键字,就像创建其他任何内容的数组一样

String[]text=新字符串[4]


这个create的四个字符串引用,将计算机引导到文本所在的位置。此外,所有字符串的默认值均为
null
,因为在您为它们指定要存储在内存地址的值之前,不会存储任何内容。

每次在字符串池中指定值时,字符串都会创建一个对象。 如果每次创建一个类似的对象,它都会查找并引用该对象,如果该值不存在,它会再次创建一个新对象。学习更多关于字符串池的知识,您将自动了解其中的区别。

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

String str=新字符串(“这是由新运算符创建的字符串”) 这是字符串对象。在这个方法中,JVM被强制创建一个新的字符串引用,即使引用池中有“this is string created by new operator”

  • 字符串是一个字符数组
  • 基本数据类型有固定数据类型的限制
  • 但是字符串的大小是不同的,这就是为什么字符串是非原语的主要原因
  • Java中的String本身就是一个类,它有自己的方法来操作String类的对象
  • 字符串有其自身的特性,即它们是不可变的

  • 基本数据类型是没有方法的类型。而字符串有方法,例如toupper、lowercase等。在intellij中,您可以检查是否有方法

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

    此图像显示的是显示方法的(字符串)(它不是基元)

    老实说,这还不太清楚。请澄清你需要什么。你是在问为什么我们可以使用字符串而不导入?可能重复:@Rousseao我在这个问题的任何地方都看不到导入这个词。他想知道为什么他不必使用new来创建字符串对象。为什么他可以使用文本,即使它不是原语。poss非常感谢。我得到了我需要的答案。@Ank如果你同意,那么这应该是被接受的答案。。。