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

  • 相关阅读:
    浅谈SQL Server事务与锁(上篇)
    浅谈缓存技术在ASP.NET中的运用
    浅谈ASP.NET框架
    浅谈Google Chrome浏览器(操作篇)(上)
    浅谈Google Chrome浏览器(理论篇)
    linux安装字体
    【tomcat系列】详解tomcat架构(上篇)
    【tomcat系列】配置tomcat远程访问
    从实战角度超级详解中大型企业微服务化的六大核心关键技术
    Idea Intellij 终生破解版
  • 原文地址:https://www.cnblogs.com/AI-Cobe/p/8509994.html
Copyright © 2011-2022 走看看