可能重复:
Java字符串:"String s = new String("silly");"
Java中表达式"new String(...)"的目的是什么?
有两种方法可以创建String对象:
1)在String中使用literal s ="hello"(创建一个对象)
2)在String中使用new s = new String("hello")(创建两个对象)
我想知道为什么我需要采取方法?
Ric*_*nte 12
如果使用new创建字符串,则会获得不同的String引用.这可以避免蠕动行为:
String s = "hello";
String t = "hello";
String u = new String("hello");
System.out.println(s==t);
System.out.println(t==u);
Run Code Online (Sandbox Code Playgroud)
打印true,false.我真的不能想到我会使用它的软件.但从某种意义上说,创建新引用更"安全",因此==并不会让我们感到惊讶.
它们之间的基本区别是内存分配.
第一种选择即
String s1 = "hello";
Run Code Online (Sandbox Code Playgroud)
使用时,s1称为字符串文字,s1的内存在编译时分配.
但在第二种情况下
String s2 = new String("hello");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,s2被称为表示hello的String对象
当您尝试使用第一种情况创建两个字符串文字时,这两个文字只引用一个内存.我的意思是字符串文字正在使用字符串池的概念.当您创建具有相同内容的第二个字符串文字时,而不是分配新的空间编译器将返回相同的引用.因此,当您使用==运算符比较这两个文字时,您将得到真实.
但在第二种情况下,JVM每次都会为每个创建一个新对象.你必须使用equals()方法比较它们的内容,而不是使用==运算符.
如果要使用第二种情况创建新的字符串对象,并且您不想要新对象,则可以使用intern()方法获取相同的对象.
String s = "hello";
String s1 = new String("hello").intern();
System.out.println(s == s1);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,而不是创建一个新的对象,JVM将返回相同的参考小号.所以输出将是真的
| 归档时间: |
|
| 查看次数: |
2943 次 |
| 最近记录: |