zoukankan      html  css  js  c++  java
  • Java-不可变字符串

    一个字符串对象一旦产生,它的内容就是固定不变的。

    String str1 = "Hello";

    str1 = "Hi";

    请问改变了字符对象没有?

    当然没有,只不过是将 str1 这个引用指向了另一个字符串对象。

    String str2 = "staph";

    String str3 = "staph";

    System.out.print(str2 == str3);

    结果为:true

    java运行时会维护一个String池,对于一些可以共享的字符串对象,会先在String池中查找看是否存在相同的字符串,如果有就直接返回该字符串对象,反之,在String池中创建该字符串对象。以减少内存的耗用

    String str4 = new String("goodboy");

    String str5 = new String("goodboy");

    System.out.print(str4 == str5);

    结果为:false

    ①String str4 = "goodboy"; 和 ②String str4 = new String("goodboy"); 字符串内容相同,但是却天差地别。①会现在String池中查找看是否有与之内容相同的字符串,②直接在堆上创建存储空间,存放字符串内容。

    所以上列程序,相当于是创建了两个字符串对象。所以结果为:false

    API 中 String 的 intern()方法

    在intern() 方法被调用的时候,如果String池中已经包含了相同内容的字符串对象(相同与否由equals()决定),那么会从String池中返回给字符串对象,否则原字符串对象会被加到String池中,并返回这个字符串对象。

    String str1 = "fly";

    String str2 = "weight";

    String str3 = "flyweight"

    String str4 = str1 + str2;

    System.out.print(str4 == str3);

    结果:false

    str4 = (str1 + str2).intern();

    System.out.print(str4 == str3);

    结果:true

    在java中,使用+串联字符串会产生一个新的字符串对象。

  • 相关阅读:
    CF174 div1 B. Cow Program 记忆化搜索
    调整方向,思考
    国际歌法文歌词
    博客认证
    卖东西
    实际上网上社区是一个微型的社会,拿来做社会学的实验我相信非常有意思.
    关于博客应用
    转:在线工具
    关于社区气质
    定餐网
  • 原文地址:https://www.cnblogs.com/AI-Cobe/p/8509994.html
Copyright © 2011-2022 走看看