JVM(StringTable)代码详解

package stringTable;

//StringTable["a" "b" ] hashtable 结构

不能扩容

public class demo {

//常量池中的信息,都会被加载到运行时常量池中,这时 a b ab 都是常量池中的符号,还没有变为java字符串对象

//ldc #2 会把 a符号变为"a"字符串对象,"a"与StringTable中对象进行比对,若没有与它相同的对象

//它将会被放入StringTable(字符串表)中,若有它将会使用StringTable(字符串表)中的对象。

//ldc #3 会把 b符号变为"b"字符串对象,"b"与StringTable中对象进行比对,若没有与它相同的字符

//它将会被放入StringTable(字符串表)中,若有它将会使用StringTable(字符串表)中的对象。

/**

  * @param args

  */

public static void main(String[] args) {

  // TODO Auto-generated method stub

  String s1="a";

  String s2="b";

  String s5="ab";

  String s3="a"+"b";//javac在编译期间的优化,结果已经在编译期间确定为ab

  String s4=s1+s2;//new StringBuilder().append("a").append("b").toString() new String("ab")

  String s6=s4.intern();

  //问:

  System.out.println(s3==s4);//s3中的对象是StringTable中的对象,s4中的对象是新创建的对象,因此他们两个不相等,打印false.

  System.out.println(s3==s5);//两者在创建对象时都使用的是StringTable中的对象,因此他们两个是相等的,打印true。

  System.out.println(s3==s6);

 

  String x2=new String("c")+new String("d");

  String x1="cd";

  x2.intern();

 

  //问,如果调换了【最后两行代码】位置呢?如果是JDK1.6呢?

  System.out.println(x1==x2);

}

}

判断结果:false、true、true、false

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从网上复制的,看别人的比较全面,自己搬过来,方便以后查找。原链接:https://www.cnblogs.com/...
    lxtyp阅读 1,357评论 0 9
  • package cn.itcast_01;/* 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。 ...
    蛋炒饭_By阅读 603评论 0 0
  • java中String的常用方法 1、length()字符串的长度 例:char chars[]={'a','b'...
    赤赤有名阅读 2,094评论 0 10
  • API 文档 String Builder and String Buffer package org.forte...
    刘玉鹏151阅读 101评论 0 0
  • String类和正则表达式 今天的主要内容 Scanner类概述Scanner获取数据出现的小问题及解决方案 St...
    须臾之北阅读 1,953评论 0 3