繁体   English   中英

这两种初始化String的方法有什么区别?

[英]What is the difference between these two ways of initializing a String?

String obj = null;
obj= new String("Samuel");

//vs

String obj = null;
obj="Samuel";

这两种初始化String的方法有什么区别吗?

是。 并且总是喜欢第二种选择。

第一个创建一个不必要的字符串实例。 字符串文字(字符串周围的两个引号)自己创建一个字符串对象。 然后,如果您使用第一个选项,则会创建另一个不必要的实例。

当您仅使用字符串文字(第二个选项)时,jvm使用一个表来存储规范字符串对象。 因此,对于使用"Samuel"声明的所有字符串,JVM中只有一个实例。 但是如果你使用String(str)构造函数,你将拥有更多的实例,这意味着更多的内存。

要在评论中回答后续问题:这仅适用于字符串。 所有其他对象都是通过构造函数创建的,因为它们没有指定的文字。
例如,你需要Car car = new Car("honda", "civic") 简单地说("honda, "civic")不是一个有效的语法 - 不知道你在创建什么类型。

String obj = new String("Samuel");
String obj1 = new String("Samuel");

// VS

String obj = "Samuel";
String obj1 = "Samuel";

在第一种情况下, obj==obj1返回false

在第二种情况下, obj==obj1返回true。

原因是在第一种情况下,您有两个不同对象的引用。 在第二种情况下,你有一个对象,因为字符串是不可变的他们拘留 ,并从同一个池中提取。

因此, s1 == s2将为假, s1.equals(s2)将为真。 区别在于第一种类型的声明字符串称为“字符串文字”,第二种类型的声明字符串称为“字符串对象”。 字符串文字用于优化内存的使用并有效地管理内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM