美文网首页java基础
Java intern方法

Java intern方法

作者: 韭菜待收割 | 来源:发表于2018-09-29 11:07 被阅读0次

1、String s1=s.intern();

/**
* 运行环境JDK1.8
* 1、s1=s.intern(); 这句代码在JDK1.7及以上
* 1)常量池中已经存在
* s啥也不做,还是指向堆空间中的字符串对象
* 2)常量池中不存在
* 常量池直接存储堆中的引用
*
* 2、String me = new String("我是拉格朗日");
* 生成常量池中的“我是拉格朗日” 和堆空间中的字符串对象。
*
* 3、String me = new String("我是")+ new String("拉格朗日");
* 不会在常量池创建“我是拉格朗日”
*
* 4、String s3 = new String("我是") + new String("拉格朗日");
* System.out.println(s3 == s4);
*
* String s4 = "我是拉格朗日";   s3.intern();  这两句顺序不一样打印结果不一样
*
*   String s4 = "我是拉格朗日";在前,打印false
*   Why?因为此时常量池不存在,会直接在常量池创建一个新对象
*
*   s3.intern();     在前,打印true
*   Why?因为此时常量池不存在,常量池直接存储堆中的引用,并不会创建新对象
* */

2、代码示例

public class MainTest {
    public static void main(String[] args) {
        // 运行环境JDK1.8
        MainTest mainTest = new MainTest();
        //mainTest.test();
        //mainTest.test2();
        //mainTest.test3();
        //mainTest.test4();
    }
    public void test(){
        String me = new String("我是")+ new String("拉格朗日");
        //常量池不存在的情况
        System.out.println(me.intern() == me);  //打印true
        System.out.println(me == "我是拉格朗日");  //打印true
    }
    public void test2(){
        String me2 = "我是拉格朗日";
        String me1 = new String("我是")+ new String("拉格朗日");
        //常量池已经存在的情况
        System.out.println(me1.intern() == me1);  //打印false
        System.out.println(me1 == "我是拉格朗日");  //打印false
    }
    
    public void test3(){
        String me = new String("我是拉格朗日");
        //常量池已经存在的情况
        me.intern();
        String me2 = "我是拉格朗日";
        //JDK1.6打印false  JDK1.7打印false
        System.out.println(me == me2);
          
        String me3 = new String("我是") + new String("2B");
        //常量池不存在的情况
        me3.intern();
        String me4 = "我是2B";
        //JDK1.6打印false  JDK1.7打印true
        System.out.println(me3 == me4);
    }

    public void test4(){
        String me = new String("我是拉格朗日");
        String me2 = "我是拉格朗日";
        //常量池已经存在的情况
        me.intern();
        System.out.println(me == me2);  //打印false

        String me3 = new String("我是") + new String("2B");
        String me4 = "我是2B";
        //常量池已经存在的情况
        me3.intern();
        System.out.println(me3 == me4);  //打印false
    }
}

相关文章

  • Java intern()用法

    转自:Java intern() 方法 尽管在输出中调用intern方法并没有什么效果,但是实际上后台这个方法会做...

  • 在Java中什么时候使用String.intern()方法?

    当中的String.intern()方法可以用来处理在Java中字符串的重复问题。通过使用intern()方法,可...

  • Java intern方法

    1、String s1=s.intern(); 2、代码示例

  • Java intern() 方法

    intern() 方法返回字符串对象的规范化表示形式。 它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 ...

  • Java String.inern()

    在java1.7以后,调用intern()方法不再在常量池中寻找相等常量,若寻找不到则创建。 intern()会在...

  • 关于intern()

    开始介绍 intern()方法前,先看一个简单的 Java程序吧! publicclassIntern{ ...

  • Java 实例 - 字符串优化

    Java 实例 - 字符串优化 Java 实例以下实例演示了通过 String.intern() 方法来优化字符串...

  • String源码中的intern()方法使用分析

    intern()该方法的注释是 When the intern method is invoked, if the...

  • 揭开 String.intern() 那神秘的面纱

    缘起 开始介绍 intern()方法前,先看一个简单的 Java程序吧!下面是一段 Java代码,代码内容比较简单...

  • java String的intern方法

    我们知道再jvm的运行时内存可以分为堆、方法区、程序计数器、虚拟机栈和本地方法栈。而在方法区中有一个字符串常量池,...

网友评论

    本文标题:Java intern方法

    本文链接:https://www.haomeiwen.com/subject/nquvoftx.html