1

字符串是java中的一个类。在声明和分配字符串时,说String name = "Paul"是正确的,尽管要从 java 类中实例化一个对象,我们使用String name = new String(); 以名称为对象,我想知道为什么我们可以为对象分配一系列字符“保罗”。这个是在什么概念下工作的,它是如何工作的?

4

2 回答 2

6

在 Java 代码中

"Paul"

是一个字符串文字和

String name

String具有名称的类型变量name.

Java 语言规范,第 3.10.5 节指出:

字符串文字始终是类型String

As123是一个int字面量并且是一个名为int number的类型变量,遵循这两个语句都是合法的,因为赋值左侧和右侧的类型匹配:intnumber

int number = 123;
String name = "Paul";
于 2013-05-14T11:49:40.800 回答
5

那是因为隐式字符串 -"..."也被视为对象。

在封面下,JVM 会在所谓的“对象”中查找类似的“对象”,String pool然后如果在那里找到它,它会返回该对象(而不是创建新对象),否则会创建新对象并将其放入字符串池中。

这是为了提高内存效率,和 "Paul" 所以 new String("Paul") 不一样。

这是可能的,因为我们知道,字符串在 Java 中是不可变的。

您可以通过搜索关键字“字符串池”来阅读有关此行为的更多信息。

于 2013-05-14T11:44:59.723 回答