JVM学习分享-思考题
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学习分享-思考题的更多相关文章
- JVM学习分享-练习题
package org.fenixsoft.clazz; public class TestClass { private int m; public int inc() { return m + 1 ...
- JVM学习(4)——全面总结Java的GC算法和回收机制
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 一些JVM的跟踪参数的设置 Java堆的分配参数 -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的 ...
- JVM学习(3)——总结Java内存模型
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 为什么学习Java的内存模式 缓存一致性问题 什么是内存模型 JMM(Java Memory Model)简 ...
- jvm内存JVM学习笔记-引用(Reference)机制
在写这篇文章之前,xxx已经写过了几篇关于改jvm内存主题的文章,想要了解的朋友可以去翻一下之前的文章 如果你还不了解JVM的基本概念和内存划分,请阅读JVM学习笔记-基础知识和JVM学习笔记-内存处 ...
- JVM学习04:类的文件结构
JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理
- JVM学习03:性能监控工具
JVM学习03:性能监控工具 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 性能监控工具知识要点Xmind梳理 案例分析 案例分析1-JPS 案例分 ...
- JVM学习02:GC垃圾回收和内存分配
JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...
- JVM学习01:内存结构
JVM学习01:内存结构 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 内存结构知识要点Xmind梳理 案例分析 分析1 package com.h ...
- Swagger框架学习分享
Swagger框架学习分享 转至元数据结尾 Created and last modified by 刘新宇 大约1分钟曾经 pageId=162045803#page-metadata-start& ...
随机推荐
- 转:ETL讲解(很详细!!!)
ETL讲解(很详细!!!) ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要 ...
- 基于VMware Workstation下Windows server的搭建
网络安全学习内容 一.VMware安装Windows系统 1.1安装配置虚拟机 需要提前准备的东西: 配置网络实验室的IP: 为了满足实验中一些需要用到网络的需求,学校为我们提供了每个人学号密码的 ...
- 时至今日,我们应该承认.Net目前的状况实在堪忧
一: .Net之前 .Net 经历了多年的锤炼,语言特性本身非常优雅和完善,也是非常甜品的一种语言 二: .Net现状 但是与此同时,.Net的生态日益糟糕,困扰着广大.Neter 三: .N ...
- hdu-4638
There are n men ,every man has an ID(1..n).their ID is unique. Whose ID is i and i-1 are friends, Wh ...
- .net core 3.1简体中文语言包,英文只能提示变成中文!
.net core 3.1简体中文语言包,英文只能提示变成中文!这个是我自己手动用谷歌翻译翻译的一批文档,已经把.net core3.1完全翻译了,由于是翻译器翻译,所以怕翻译有错漏,所以没有去掉英文 ...
- 【重温基础】11.Map和Set对象
本文是 重温基础 系列文章的第十一篇. 今日感受:注意身体,生病花钱又难受. 系列目录: [复习资料]ES6/ES7/ES8/ES9资料整理(个人整理) [重温基础]1.语法和数据类型 [重温基础]2 ...
- 手把手教你打造一款轻量级canvas渲染引擎
背景 当我们开发一个canvas应用的时候,出于效率的考量,免不了要选择一个渲染引擎(比如PixiJS)或者更强大一点的游戏引擎(比如Cocos Creator.Layabox). 渲染引擎通常会有S ...
- 【hibernate】常用注解
[hibernate]常用注解 转载:https://www.cnblogs.com/yangchongxing/p/10357118.html 目录 ======================== ...
- 网络配置工具iproute2和net-tools的基本原理和基本使用方法
这是网络程序设计课程的第一次作业的博客,由于还是小白,分享的内容都是比较基础的东西,希望看到的各位同学可以提出指导意见,必将虚心听取. 这次分享的内容是网络配置工具iproute2和net-tools ...
- NodeJS3-2基础API----Buffer(缓冲器)
Buffer(缓冲器) Buffer是用于处理二进制数据流的 实例类似整数数组,大小固定(实例化之后,是多大就多大,不能进行变更) C++代码在V8 对外分配物理内存 Buffer是全局变量,没必要使 ...