当前位置: 首页 > 知识库问答 >
问题:

下列声明的差异[副本]

逑和蔼
2023-03-14
String str1="one";
String str2="two";
String str3=new String(str1+str2);
String str3=str1+str2;
String str4="onetwo";

那么在上述任何一个声明中,

if(str4==str3) {
    System.out.println("This is not executed");
}

为什么str3str4不引用同一个对象?

共有1个答案

濮俊美
2023-03-14

str1+str2对于非编译-常量字符串将编译到
new StringBuilder(str1).append(str2).tostring()中。这个结果不会被放入,也不会从字符串池(被存储的字符串所在的地方)中获取。

“foo”+“bar”的情况下,情况就不同了,编译器知道他使用哪些值,所以他可以将这个字符串连接一次,以避免在运行时出现这种情况。这样的字符串文字也将被实习生。

所以字符串str3=str1+str2;

String str3 = new StringBuilder(str1).append(str2).toString();
String str3 = new String(new StringBuilder(str1).append(str2).toString());
 类似资料:
  • 我很好奇,在声明ArrayList时,这样做有什么区别: 这是: i、 e.未声明<代码>

  • 在我们的系统中,我们有一种设置用户权限的方法。他们创建一个组名,例如Admin,然后为他们想要执行的任务分配所有权限。 例如,他们可以添加AddCompany、ViewCompany、DeleteCompany和EditCompany 这使得创建不同的权限组变得非常容易,并且我们可以非常容易地控制安全性。 在这个实例中,组名=角色,每个权限都是一个声明,我这样想对吗?

  • 在系统中。识别模型。声明有三个条目:UPN、Name和Name标识符http://schemas.xmlsoap.org/ws/2005/05/identity/claims/namehttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/upnhttp://schemas.xmlsoap.org/ws/2005/05/identity/clai

  • 问题内容: 我的理解是,在C#中为泛型指定差异是在类型声明级别进行的:创建泛型类型时,请为类型参数指定差异。另一方面,在Java中,在使用泛型的地方指定了方差:当创建某个泛型类型的变量时,可以指定其类型参数如何变化。 每个选项的优缺点是什么? 问题答案: 我只想回答声明站点和使用站点之间的差异,因为尽管C#和Java泛型在许多其他方面有所不同,但这些差异大多与方差正交。 首先,如果我没记错的话,使