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

这两种初始化字符串[重复]的方法有什么不同

哈翔
2023-03-14
String a="abc";
String b="abc";
System.out.println(a==b + " " + a.equals(b));
String a="abc";
String b=new String("abc");
System.out.println(a==b + " " + a.equals(b));

输出为“false true”

共有1个答案

赫连秦迟
2023-03-14

当你使用这个

String a="abc";
String b="abc";

java在内存中只创建一个对象,即abc,这里a和b指向同一个对象,==不检查字符串内容,而是检查引用值。但只要你这么做

String b=new String("abc");

java在内存中创建了一个新对象b,它与a不同,现在b和a指向两个不同的对象,因此,如果将内容与equals函数进行比较,result将为true,但如果现在比较reference,result将为false

 类似资料:
  • 我在我的程序中使用了HashMap,它工作得很好,但是我不明白HashMap的这些初始化之间的区别。 假设我正在实现一个HashMap,其中字符为键,整数为值。这两者之间有什么区别?

  • 我想存储一组/值,但是s不一定是增量的,这意味着数据可以是: 因此,我试图创建一个c#等价的

  • 问题内容: 我正在寻找最短的方法(在代码中)初始化字符串列表和字符串数组,即包含“ s1”,“ s2”,“ s3”字符串元素的列表/数组。 问题答案: 有多种选择。我个人喜欢使用番石榴: (当然,番石榴是值得拥有的图书馆:) 仅使用JDK,您可以使用: 请注意,这将返回一个,但这 不是 正常的-这是一个内部变量,该变量是可变的但固定大小。 就我个人而言,我更喜欢Guava版本,因为它可以清楚说明正

  • 此行不显示可能的有损转换,而 上面的一行显示错误。有什么原因吗?

  • 这里有两个相同的代码,唯一的区别是我在第一个代码中使用的是在for循环内初始化的字符串,另一方面我使用的是在for循环外初始化的字符串,但得到的答案仍然不同 在for循环内初始化的字符串: 输出为以下形状: 在for循环外部初始化的字符串: 输出为以下形状: 我真的很困惑正在发生的事情,提前谢谢你。

  • 问题内容: 我知道对于上面的第3个初始化,字符串对象在字符串池中初始化,而第4个与字符串池无关。 1.和2有 什么区别?如果我将其视为指针变量,它存储的是特定内存地址,而该内存地址从未被JVM或OS使用? 4.和5 之间有区别吗? 当我打印和通过直接和,对,我甚至无法通过compilation.For ,编译OK,我得到“空”,并在控制台窗口中的输出。为什么? @aioobe的答案后编辑:更多问题