1. 字符串驻留池,就是一块与堆区并行的存放字符串对象的内存区,JVM的驻留池机制规定: 在池中创建一个String对象,第二行会先在池中寻找是否有值与"abc"相同的String对象,如果有,就直接引用,没有这在池中新建String对象
知识补充:
1. JVM 为了提高性能,会将形式例如:String  str = "我是字符串"   和   “我也是字符串” 的 字符串存放在一个名叫:字符串驻留池的内存块中。 
2. 通过new 所产生的对象 是在堆中存放的。
3 .    " == "  判断两个字符串对象时 : 当两个字符串对象完全相同时 返回true , 当内容不同或者 不是同一个对象时返回false  
举例子说明:
public class String_Test
{
    public static void main(String[] args)
    {
        String str1 = new String("字符串1");    // str1对象存放在堆里
        String str2 = "字符串1" ;               //  str2 对象是存放在驻留池
 
        String str3 = new String ("字符串3");    
        str3 = str3.intern();                 // 通过intern把new创建的对象str3放入驻留池
        String str4 = "字符串3" ;             //  JVM会将str4 指向str3在驻留池创建的对象        
        if(str1 == str2)   // 很明显 str1  和  str2 虽然是相同内容,但是不是同一对象。                   
        {
            System.out.println("str1 == str2");
        }else {
            System.out.println("str1 != str2");
        }
 
        if(str3 == str4)   // JVM的字符串驻留机制    str3  str4 是同一个对象
        {
            System.out.println("str3 == str4");        
        }else {
            System.out.println("str3 != str4");
        }
    }

}

 
结果:
str1 != str2       //   str1 str2 引用的对象不是同一个对象。
str3 == str4                 // 表明使用驻留后的str3 str4 引用的对象是同一个对象。
 
拓展视野:
一个面试题 :   String  str = new String  ("King");    问: 这句话创建了几个对象?
 
答案: 2个    一个由new 在堆区产生  另一个在 驻留池中产生
 
 
 
 

String特性之 “字符串驻留池”的更多相关文章

  1. JAVA 字符串驻留池

    一切从String str = new String("abc")说起...    这行代码形式上很简单,其实很复杂.有一个常见的Java笔试题就是问上面这行代码创建了几个Stri ...

  2. .Net字符串驻留池

    在.Net中,对于相同的字符串,.Net会将它们指向同一个地址,它们是相同的实例..Net中的字符串并不会更新,当更改一个字符串变量时,由于字符串的不可变性,.Net实际上是新创建一个字符串,而将变量 ...

  3. C# 字符串驻留池

    在.Net中,对于相同的字符串,.Net会将它们指向同一个地址,它们是相同的实例..Net中的字符串并不会更新,当更改一个字符串变量时,由于字符串的不可变性,.Net实际上是新创建一个字符串,而将变量 ...

  4. Python隐藏特性:字符串驻留、常量折叠

    下面是Python字符串的一些微妙的特性,绝对会让你大吃一惊. 案例一: >>> a = "some_string" >>> id(a) 140 ...

  5. Java中,那些关于String和字符串常量池你不得不知道的东西

    老套的笔试题 在一些老套的笔试题中,会要你判断s1==s2为false还是true,s1.equals(s2)为false还是true. String s1 = new String("xy ...

  6. String:字符串常量池

    String:字符串常量池 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池: 字 ...

  7. Knowledge Point 20180309 字符串常量池与String,intern()

    引言 什么都先不说,先看下面这个引入的例子: public static void test4(){ String str1 = new String("SEU") + new S ...

  8. Java String:字符串常量池(转)

    作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么? 字符串常量池的设计思想是什么? 字符串常量池在哪里? 如何操作字符串常量 ...

  9. [你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

    发布日期:2008.8.27 作者:Anytao © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 走钢丝的人,在刺激中体验快感.带着问题思考,在问题 ...

随机推荐

  1. 微信小程序 左右联动菜单

    根据左侧列表,联动跳右侧内容. 效果如图: wxml代码: <view class="page"> <!-- 左侧导航 --> <view class ...

  2. Flutter 页面下拉刷新和上拉加载

    flutter_easyrefresh 正如名字一样,EasyRefresh很容易就能在Flutter应用上实现下拉刷新以及上拉加载操作,它支持几乎所有的Flutter控件.它的功能与Android的 ...

  3. Python学习笔记——类和对象

    类和对象 1. 一个例子 # 对象 = 属性 + 方法 # Python 中的类名称约定首字母大写,而 Python 函数名首字母小写 class Turtle: #属性 color = 'green ...

  4. get_object_var 返回一个数组

    语法:get_object_var($object),返回一个数组.获取$object对象中的属性,组成一个数组 实例: <?php class person{ public $name=&qu ...

  5. Union All 使用注意事项和字段顺序不一致导致的异常

    使用注意,先说结果: UNION 操作符用于合并两个或多个 SELECT 语句的结果集,这里需要注意的是: UNION 内部的 SELECT 语句必须拥有相同数量的列: 列也必须拥有相似的数据类型(实 ...

  6. MySql中的count、NULL和空串的区别

    **1.count (1).count (*) 与 count (列名) 的区别** 表 count(1) count(*) count (列名) 作用 统计表中的所有的记录数 会统计表中的所有的记录 ...

  7. [LuoguP2143]巨额资金_Kruskal_Matrix-Tree定理

    巨额资金 题目链接:https://www.luogu.org/problem/P2143 数据范围:略. 题解: 有一个条件是每种权值的边最多是$10$条. 但是并不知道怎么用.... 不过有一点我 ...

  8. kettle下载地址

    kettle 4.4和4.2 版本是好的,版本6.6和8.2 版本有bug Kettle下载和安装: 1.官网各个版本下载地址:https://sourceforge.net/projects/pen ...

  9. Meta Post

    $\require{color} \require{enclose}$ 写博客的一些技巧和工具. To use the following three macros it is necessary t ...

  10. 【AtCoder】ARC069

    ARC069 C - Scc Puzzle --不说了 #include <bits/stdc++.h> #define fi first #define se second #defin ...