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. ASP.NET Core 选项模式源码学习Options IOptions(二)

    前言 上一篇文章介绍IOptions的注册,本章我们继续往下看 IOptions IOptions是一个接口里面只有一个Values属性,该接口通过OptionsManager实现 public in ...

  2. [TimLinux] JavaScript 获取设置在CSS类中的属性值

    1. 设置属性值 // 常用方式 var myEl = document.getElementById('idMyEl'); myEl.style.display = "none" ...

  3. Vue - 简单实现一个命令式弹窗组件

    前言 在日常工作中弹窗组件是很常用的组件,但用得多还是别人的,空闲时间就自己来简单实现一个弹窗组件 涉及知识点:extend.$mount.$el 使用方式: this.$Confirm({ titl ...

  4. R语言绘制KS曲线

    更多大数据分析.建模等内容请关注公众号<bigdatamodeling> 将代码封装在函数PlotKS_N里,Pred_Var是预测结果,可以是评分或概率形式:labels_Var是好坏标 ...

  5. 使用FileReader在浏览器读取预览文件(image和txt)

    如标题,之前在某个地方看到因为有Blob的存在,理论上可以在浏览器上查看所有格式的文件.自己想着试试现在暂时只能够查看图片和预览txt文件.其他的比如doc,docx格式的文件查看的时候是乱码 如图: ...

  6. 基于Pact的契约测试

    背景 如今,契约测试已经逐渐成为测试圈中一个炙手可热的话题,特别是在微服务大行其道的行业背景下,越来越多的团队开始关注服务之间的契约及其契约测试. 什么是契约测试     关于什么是契约测试这个问题, ...

  7. Neety的基础使用及说明

    BIO(缺乏弹性伸缩能力,并发量小,容易出现内存溢出,出现宕机 每一个客户端对应一个线程 伪异步IO:创建线程池,由线程池里边的线程负责连接处理,M个个请求进来时,会在线程池创建N个线程.容易出现线程 ...

  8. ceph安装

    使用ceph-deploy部署部署版本ceph-luminous   一,下载安装包,制作yum源,yum将挂载到192.168.100.100 (1)下载安装包 mkdir ceph-luminou ...

  9. git常用操作合集

    基本操作git status 查看文件处于什么状态 git status -s 带上-s参数,可以以更紧凑的格式输出文件状态信息 git add 开始追踪该文件或者暂存已修改的文件. .gitigno ...

  10. linux中文件压缩介绍

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/1c62bb7f-f ...