了解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)