【问题标题】:String difference in java [duplicate]java中的字符串差异[重复]
【发布时间】:2014-10-24 12:13:40
【问题描述】:

为什么 String 类在 Java 中是不可变的,因为每次我们在一个对象上调用某些方法 字符串引用变量,新建字符串?

  public class Test {

       public static void main(String [] args) {

            String s = "abc";
            s.toUpperCase(); // new String is created here.
            System.out.println(s);// prints abc instead of ABC
    }
}

【问题讨论】:

标签: java


【解决方案1】:

为什么 String 类在 Java 中是不可变的,因为每次我们在 String 引用变量上调用某些方法时,都会创建新的 String?

没有。这不是因为创建新字符串。反过来走。为什么每次你都得到一个新的字符串?

由一个字符数组支持的字符串,该数组在 String 类中是最终的。因此,一旦您创建了一个 String,char 数组在 String 对象创建后就永远不会改变。这才是它背后的真正原因。

【讨论】:

    【解决方案2】:

    java 中有一些类型,其实例是不可变的。除了String,还有BigInteger, BigDecimalInteger, Long, Double, Float, Short, Byte .(those wrapper types).. 甚至Boolean 这些实例都是不可变的。如果您对这些实例进行更改,则不会更改这些实例的自身。

    例如

    Long num = 7L;
    num = num + 10L;
    

    在你运行这两行之后,数字自然会是 17。但是在你运行第二行之后,num 将是一个新的Long 实例。同String

    另一个例子:

    Boolean b = true;
    b = false;
    

    第一行和第二行中的b 也是不同的实例。

    不可变对象相对更容易设计、实现和使用。我这就是java应用不可变设计的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2019-02-21
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 2010-10-02
      相关资源
      最近更新 更多