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

  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/AI-Cobe/p/8509994.html
Copyright © 2011-2022 走看看