package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* 当调用intern方法时,
* 如果池已经包含此字符串(equals确定),则返回池中字符串。
* 否则,将此String对象添加到池中并且返回该String对象的引用。
*/
public class StringConstantPool_Intern { @Test
public void test1() {
String a1 = "AA";//当调用intern方法时,如果池已经包含此字符串(equals确定),则返回池中字符串。否则,将此String对象添加到池中并且返回该String对象的引用。
a1.intern();
}
}
package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* /Users/zero/Code/Myself/Project/zero-Project/jvm/target/classes/zero/desk/stringconstantpool
* javap -verbose StringConstantPoolAA
* cd ../stringconstantpool
*/
public class StringConstantPoolAA { @Test
public void test1() {
String a1 = "AA";//在常量池上创建常量AA
String a2 = "AA";//直接返回已经存在的常量AA
System.out.println(a1 == a2); //true
} }
package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* 思考题
*/
public class StringConstantPoolAAAA { @Test
public void test1() {
String a1 = new String("AA");//在堆上创建常量AA
String a11 = a1.intern();
String a2 = "AA";//在常量池上创建常量AA
System.out.println(a1 == a2); //false
System.out.println(a1 == a11); //false
System.out.println(a11 == a2); //true
} }
package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* 思考题
*/
public class StringConstantPoolAABB { @Test
public void test1() {
String a1 = "AA"+"BB";//在常量池上创建常量AABB
String a2 = "AABB";//在常量池上创建常量AABB
System.out.println(a1 == a2); //true
} }
package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* 思考题
*/
public class StringConstantPoolNAA { @Test
public void test1() {
String a1 = "AA";//在常量池上创建常量AA
String a2 = new String("AA");//在堆上创建对象AA
String a3 = a2.intern();//常量池上存在常量AA,直接返回常量池上常量AA,即a1
System.out.println(a1 == a2); //false
System.out.println(a1 == a3); //true
System.out.println(a2 == a3); //false
System.out.println(System.identityHashCode(a1));
System.out.println(System.identityHashCode(a2));
} }
package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* 思考题
*/
public class StringConstantPoolNAABB { @Test
public void test1() {
String a3 = "AA"+new String("BB"); //在堆上创建对象AABB
// String a33 = a3.intern();
String a333 = "AABB";//在常量池上创建常量AABB
System.out.println(a333 == a3); //false
//
System.out.println(System.identityHashCode(a3));
System.out.println(System.identityHashCode(a333));
}
}
package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* 思考题
*/
public class StringConstantPoolNAABBi { @Test
public void test1() {
String a3 = "AA"+new String("BB"); //在常量池上创建常量AABB
String a33 = a3.intern();
String a333 = "AABB";//在常量池上创建常量AABB
System.out.println(a333 == a3); //true
//
System.out.println(System.identityHashCode(a3));
System.out.println(System.identityHashCode(a33));
System.out.println(System.identityHashCode(a333));
}
}
package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* 思考题
*/
public class StringConstantPoolNAANBB { @Test
public void test1() {
String a3 = new String("AA")+new String("BB"); //在堆上创建对象AABB
// String a33 = a3.intern();
String a333 = "AABB";//在常量池上创建常量AABB
System.out.println(a333 == a3); //false
//
System.out.println(System.identityHashCode(a3));
System.out.println(System.identityHashCode(a333));
}
}
package zero.desk.stringconstantpool;

import org.junit.Test;

/**
* @author Zero
* @since 2019-09-17.
* Description:
* 思考题
*/
public class StringConstantPoolNAANBBi { @Test
public void test1() {
String a3 = new String("AA")+new String("BB"); //在常量池上创建常量AABB
String a33 = a3.intern();
String a333 = "AABB";//在常量池上创建常量AABB
System.out.println(a333 == a3); //true
//
System.out.println(System.identityHashCode(a3));
System.out.println(System.identityHashCode(a33));
System.out.println(System.identityHashCode(a333));
}
}

JVM学习分享-思考题的更多相关文章

  1. JVM学习分享-练习题

    package org.fenixsoft.clazz; public class TestClass { private int m; public int inc() { return m + 1 ...

  2. JVM学习(4)——全面总结Java的GC算法和回收机制

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 一些JVM的跟踪参数的设置 Java堆的分配参数 -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的 ...

  3. JVM学习(3)——总结Java内存模型

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 为什么学习Java的内存模式 缓存一致性问题 什么是内存模型 JMM(Java Memory Model)简 ...

  4. jvm内存JVM学习笔记-引用(Reference)机制

    在写这篇文章之前,xxx已经写过了几篇关于改jvm内存主题的文章,想要了解的朋友可以去翻一下之前的文章 如果你还不了解JVM的基本概念和内存划分,请阅读JVM学习笔记-基础知识和JVM学习笔记-内存处 ...

  5. JVM学习04:类的文件结构

    JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理

  6. JVM学习03:性能监控工具

    JVM学习03:性能监控工具 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 性能监控工具知识要点Xmind梳理 案例分析 案例分析1-JPS 案例分 ...

  7. JVM学习02:GC垃圾回收和内存分配

    JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...

  8. JVM学习01:内存结构

    JVM学习01:内存结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 内存结构知识要点Xmind梳理 案例分析 分析1 package com.h ...

  9. Swagger框架学习分享

    Swagger框架学习分享 转至元数据结尾 Created and last modified by 刘新宇 大约1分钟曾经 pageId=162045803#page-metadata-start& ...

随机推荐

  1. 华为云MySQL金融版正式商用,高可靠的金融级数据库来了

    摘要:全新三节点架构,基于深度优化的MGR组复制技术,提供金融级的数据一致性. 日前,华为云数据库MySQL 金融版正式商业化发布,MySQL金融版采用MGR技术,基于Paxos协议,采用一主两备三节 ...

  2. 深入比特币原理(四)——锁定脚本(locking script)与解锁脚本(unlocking script)

    通常比特币都是以虚拟货币的概念出现在大众眼前,实际上比特币是第一个真正的区块链"平台",利用它去中心化.不可篡改.可追溯等特点不光可以实现多种交易模式(如点对点交易.多重签名交易等 ...

  3. 《手把手教你》系列进阶篇之1-python+ selenium自动化测试 - python基础扫盲(详细教程)

    1. 简介 如果你从一开始就跟着宏哥看博客文章到这里,基础篇和练习篇的文章.如果你认真看过,并且手动去敲过每一篇的脚本代码,那边恭喜你,至少说你算真正会利用Python+Selenium编写自动化脚本 ...

  4. [TimLinux] CSS pre超长自动换行

    使用css样式值: pre { white-space: pre-wrap; word-wrap: break-word; }

  5. BZOJ 3106: [cqoi2013]棋盘游戏

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 859  Solved: 356[Submit][Status][Discuss] Descriptio ...

  6. Python爬虫爬取异步加载的数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:努力努力再努力 爬取qq音乐歌手数据接口数据 https://y.qq ...

  7. .Net Core使用分布式缓存Redis:数据结构

    一.前言 本篇主要使用StackExchangeRedis在.Net Core中使用Redis,使用基础见:点击此处. 二.五种基础数据结构 1.字符串类型String 字符串类型是Redis中最基本 ...

  8. protobuf-rpm

    ############################################################## # http://www.rpm.org/max-rpm/ch-rpm-i ...

  9. flash存储器原理及作用是什么?

    flash存储器的工作原理 flash存储器又称闪存(快闪存储器),是一种电可擦可编程只读存储器的形式,是可以在操作中被多次擦或写,EEPROM与高速RAM成为当前最常用且发展最快的两种存储技术.计算 ...

  10. java项目测试环境搭建

    java项目测试环境搭建 2019-03-06 13:45:26 木瓜小少年 阅读数 691更多 分类专栏: 测试   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原 ...