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

为什么字符串中的double-equal-to的工作方式如此不同?[副本]

贝礼骞
2023-03-14
String str = "hello";
    String s = str; 
    System.out.println(str==s); 
    String str2 = new String ("world");
    String s2 = str2;
    System.out.println(str2 == s2); 
    String str3 = str + str2;
    String str4 = "helloworld";
    String str5 = new String ("helloworld");
    System.out.println(str3 ==str4); 
    System.out.println(str3 ==str5);

输出

true true false false

有人能用Java向我解释一下上述程序片段的输出吗?

共有1个答案

温峻熙
2023-03-14

更新时间:

回答您在评论中的疑问:

这是我从互联网上得到的一张图表:

这清楚地解释了为什么str3!=str4str3!=str5(因为在您进行连接的那一刻,就会创建一个新对象。

正如@Paul在评论中提到的,测试它们在内存中是否是相同的对象引用。但是<代码>。等于(…) 测试值相等,即找出它们在逻辑上是否相等。

首先,str==s,因为您正在执行字符串s=str 即s是对与str相同的对象的引用。因此两者相等。

与s2相同。

现在,

String str3 = str + str2;
String str4 = "helloworld";

这里str3和str4是不同的对象引用。所以他们是不平等的。

与str3和str5相同

 类似资料:
  • 这是学校实验室的一部分,我已经研究过了,但我找不到任何东西来完成这项任务。我正在使用FileReader和BufferedReader读取文件中的行。文件中的数据是以下格式的名称和年龄: 无名氏20 无名氏30 等等,我已经有了代码,可以将每一行进行拆分:split[0]={“John”,“doe”,“20”} 我需要得到“20”,并存储在一个双倍数组中,例如double[0]=20; 它必须是d

  • 我正在维护一个Julia库,其中包含一个函数,用于在长字符串中每80个字符后插入一行新行。 当字符串长度超过100万个字符时,此函数将变得非常慢(秒或更长)。时间的增长似乎不仅仅是线性的,可能是二次的。我不明白为什么。有人能解释一下吗? 这是一些可复制的代码: 似乎这一行是大部分时间花费的地方: 这是否意味着初始化一个新的需要很长时间?这并不能真正解释超线性运行时间。 我知道构建字符串的标准快速方

  • 问题内容: 众所周知,(大多数)浮点数没有精确存储(使用IEEE-754格式时)。因此,不应这样做: ......因为它会导致,除非一些特定的任意精度的类型/类使用(BigDecimal的中的Java/Ruby的,bcmath时在PHP中,[数学::BigInt有 / 数学::BigFloat在Perl,仅举几例)来代替。 但是,我想知道为什么当尝试打印该表达式的结果时,脚本语言(Perl和PHP

  • 下面是示例代码。执行的结果不同于jdk@11和jdk@17.将BigDecimal(1000)格式化为字符串后,白色字符看起来有所不同。最后,结果看起来是一样的——但是,它不是相同的字符串(比较bytes和Base64.encoded)。 jdk@11的结果不同于jdk@17 jdk@11结果: jdk@17结果: jdk@11: jdk@17: 系统: 这是预期行为吗?

  • 如果我有的话 在< code>b.py中,我可以< code >导入a 但如果我有 在<code>c中。pydo,突然出现在我得到 怎么了?我看不出第二种情况与第一种情况有什么不同 因此...在最初启动的模块的目录中搜索模块。我只是不明白其中的道理。 我不是在问如何解决问题。而是首先问为什么会有问题...... (在Python 3.8.8上测试)