Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解java.lang.String s=new String(";hello";)和String hold=";之间的区别;“你好”;_Java_Android - Fatal编程技术网

了解java.lang.String s=new String(";hello";)和String hold=";之间的区别;“你好”;

了解java.lang.String s=new String(";hello";)和String hold=";之间的区别;“你好”;,java,android,Java,Android,我偶然发现了这个代码,有点困惑 java.lang.String s = new String("hello"); 我不确定初始化为java.lang.String的变量是什么,这个vs String hold=“hello”的目的是什么。我试图查看一些文档,但找不到任何内容。执行此操作: String s = "hello"; String s = new String("hello"); 比这样做更好: String s = "hello"; String s = new Strin

我偶然发现了这个代码,有点困惑

java.lang.String s = new String("hello");
我不确定初始化为java.lang.String的变量是什么,这个vs String hold=“hello”的目的是什么。我试图查看一些文档,但找不到任何内容。

执行此操作:

String s = "hello";
String s = new String("hello");
比这样做更好:

String s = "hello";
String s = new String("hello");
第二个方法是在执行
“hello”
操作时创建一个string对象,将其传递给
string
构造函数,然后创建另一个相同的
string
对象。第一种方法只创建一个对象。

执行此操作:

String s = "hello";
String s = new String("hello");
比这样做更好:

String s = "hello";
String s = new String("hello");

第二个方法是在执行
“hello”
操作时创建一个string对象,将其传递给
string
构造函数,然后创建另一个相同的
string
对象。第一个方法只创建一个对象。

首先要了解的是java中字符串的不可变特性。

String hold=“hello”使用字符串的不可变性质。所以当你这么做的时候

    String hold2 = "hello"
hold和hold2都引用字符串池中“hello”字符串的相同实例。这意味着两者都指向相同的内存位置。 但是


在一个新位置有一个新字符串“hello”,hold和hold2对象引用不同的内存位置。

首先要了解的是java中字符串的不变特性。

String hold=“hello”使用字符串的不可变性质。所以当你这么做的时候

    String hold2 = "hello"
hold和hold2都引用字符串池中“hello”字符串的相同实例。这意味着两者都指向相同的内存位置。 但是


在新位置有一个新字符串“hello”,hold和hold2对象引用不同的内存位置。

这是一种非常糟糕的编程风格

java.lang.String s = new String("hello");
请记住,
java.lang
中的所有类都是自动导入的。如果在同一个包中有一个名为
String
的类,它也将被导入,但会对
java.lang.String
类进行阴影处理。这可能是完全限定类型的原因,如

java.lang.String s;
但是在这种情况下,您只能为它分配一个
java.lang.String
引用,因为该类是
final
,因此无法扩展。传统的做法是

java.lang.String s = new java.lang.String("hello");
如果你问起

java.lang.String s = new String("hello");
vs


然后查看其他答案或副本。

这是一种非常糟糕的编程风格

java.lang.String s = new String("hello");
请记住,
java.lang
中的所有类都是自动导入的。如果在同一个包中有一个名为
String
的类,它也将被导入,但会对
java.lang.String
类进行阴影处理。这可能是完全限定类型的原因,如

java.lang.String s;
但是在这种情况下,您只能为它分配一个
java.lang.String
引用,因为该类是
final
,因此无法扩展。传统的做法是

java.lang.String s = new java.lang.String("hello");
如果你问起

java.lang.String s = new String("hello");
vs


然后查看其他答案或副本。

好的,您需要了解常量池(字符串文字池)

当你这样做的时候

String s = "hello";
实际上,您正在常量池中设置变量

你在哪里做

String s = new String("hello");
它在常量池中创建一个单独的对象

在这里阅读更多关于它的信息


好的,您需要了解常量池(字符串文字池)

当你这样做的时候

String s = "hello";
实际上,您正在常量池中设置变量

你在哪里做

String s = new String("hello");
它在常量池中创建一个单独的对象

在这里阅读更多关于它的信息


您应该知道的第一件事是java中的字符串是不可变的。接下来,当您在幕后执行
String s=“hello”
时,编译器会查看
String池(java中保存字符串的地方)并检查是否已经存在
hello
字符串。如果是,它将引用
s
指向同一字符串对象并返回(Read)。现在如果您执行
stringhold2=newstring(“hello”)上面提到的任何事情都不会发生。即使您在字符串池中有
hello
字符串,它仍然会创建一个新字符串
hello
,并指向它的引用
hold2

您应该知道的第一件事是java中的字符串是不可读取的。接下来,当您在幕后执行
String s=“hello”
时,编译器会查看
String池(java中保存字符串的地方)并检查是否已经存在
hello
字符串。如果是,它将引用
s
指向同一字符串对象并返回(Read)。现在如果您执行
stringhold2=newstring(“hello”)上面提到的任何事情都不会发生。即使您在字符串池中有
hello
字符串,它仍然会创建一个新字符串
hello
,并指向它的引用
hold2

2个对象?这有点令人困惑。。。你能进一步解释吗?文本创建第一个“hello”字符串,然后字符串构造函数复制该字符串(Java字符串是不可变的),原始字符串被丢弃。所有这些都有可能被优化掉,但它仍然是非常糟糕的样式。@user2980837字符串构造函数
public String(String original)
被称为复制构造函数,因为它创建了传递给它的字符串的副本。查看dkatzel在对原始问题的评论中发布的链接。2对象?这有点令人困惑。。。你能进一步解释吗?文本创建第一个“hello”字符串,然后字符串构造函数复制该字符串(Java字符串是不可变的),原始字符串被丢弃。所有这些都有可能被优化掉,但它仍然是非常糟糕的样式。@user2980837字符串构造函数
publicstring(stringoriginal)