【问题标题】:String class in java [duplicate]java中的字符串类[重复]
【发布时间】:2014-09-24 08:22:59
【问题描述】:

在java中String是一个类,它是不可变的,所以我们不能改变它的值。在下面的代码中,它将连接其他字符串而没有任何错误。所以我想问一下,如果它是不可变的,那么为什么在下面的代码值中字符串的变化??

import java.util.*;

public class conc
{
    public static void main(String args[])
    {
        String a="Sheetal";
        a=a+"Ga";
        System.out.println("Result:"+a);
    }
}

【问题讨论】:

  • 因为它不是对原始String对象的引用?
  • a = a + "Ga" 实际上是在创建一个全新的实例String。尝试在分配之前和之后打印ahashcode ;)。也可以尝试String b = a + "Ga" 并打印出ab...
  • 你是对的,如果你没有分配一个新的字符串:)
  • 花一些时间阅读有关字符串的内容,如果您必须提出问题,请先尝试研究 SO 中的现有问题,然后再提出此类基本问题。

标签: java


【解决方案1】:

在您显示的代码中,您没有更改原始的String 对象。

相反,您创建了一个新的字符串对象,它表示a + "Ga",然后将其重新分配给引用变量a

注意Java 中除primitive types 之外的所有变量都是引用。

【讨论】:

    【解决方案2】:

    您正在通过连接两个字符串来创建一个新对象,即:您不会更改 a 引用的对象,而是将引用新 String 对象的值分配给该引用。

    【讨论】:

      【解决方案3】:
       String a="Sheetal";
              a=a+"Ga"; // now this is not the same object you are referring early
      

      当您更改您的a 时,将创建一个新的String

      您原来的String 没有变化,这就是为什么我们称Stringimmutable 而新的String 将在堆中创建。

      此时,您的堆中有 2 个对象。现在a 指的是新对象。

      【讨论】:

      • 您投反对票的理由在哪里?这不是提供答案吗?谁是反对这个的人???精神病或任何其他问题
      • 现在stackOverFlow 变得毫无意义。
      • 看起来那些不赞成票是由你的英语引起的,抱歉,但很难理解你的意思:(
      • @krems 哦,我的英语这么差吗? :(。顺便说一句,谢谢你的评论。现在我至少知道了一个可能的理由来反对。当你反对时,请看到人们发表评论。这将对我们所有人都有帮助。
      • 版主对downvote的看法-:There's no requirement to give reasons for down-votesnice
      猜你喜欢
      • 2015-10-20
      • 2014-03-25
      • 2012-09-26
      • 2010-11-30
      • 2016-03-19
      • 2013-06-08
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多