• 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中,使用+串联字符串会产生一个新的字符串对象。

  • 相关阅读:
    期望
    更改开机默认操作系统及等待时间修改
    Python排序
    Python IDLE入门 + Python 电子书
    Python基础教程——1基础知识
    Java:谈谈protected访问权限
    三星I9100有时不能收发彩信完美解决!中国移动
    java继承的权限问题
    Python基础教程——2列表和元组
    访问控制和继承(Java)
  • 原文地址:https://www.cnblogs.com/AI-Cobe/p/8509994.html
Copyright © 2020-2023  润新知