1)判断String类型的 s1 和 s2 是否相等 equals() 方法比较的是字符串的内容~所以结果是 true 很好理解,至于 str1==str2 的结果也是 true ,是因为在 Java 的内存的方法区中有一块区域叫做常量池,str1 =“abc” 时,常量池中没有 “abc”,所以就 ...
分类:
其他好文 时间:
2018-10-16 11:53:44
阅读次数:
160
1、在Java中,String类是不可变类,一个不可变类是一个简单的类,并且这个的实例也不能被修改, 这个类的实例创建的时候初始化所有的信息,并且这些信息不能够被修改 2、字符串常量池 字符串常量池是方法区中一块特殊的存储区域,当创建一个字符串常量的时候,判断该字符串字在符串字符串常量池中是否已经存 ...
分类:
编程语言 时间:
2018-10-14 00:24:36
阅读次数:
133
枚举学习 1. 问题 jdk1.5开始引入了枚举,可以很方便地组织一些固定类型的常量。 看到《Effective Java》这本书中关于枚举那一条建议中有提到“试图使每个常量都从自己的构造器将自身放到map中,会导致编译时错误”,但是这是为什么呢? 2. 写一个枚举类试验下先 如果试图在构造器中引用 ...
分类:
其他好文 时间:
2018-10-10 01:04:06
阅读次数:
187
参考: 《Java 并发实践》 李大狗大神的大作和源码非常值得分析阅读 1. 的`hashCode`:数据缓存在类变量中 字符串类维护了一个常量池—每当使用 创建对象,都会首先检查字符串是否在常量池中—有的话直接返回池中对象的实例引用,否则则创建一个对象返回 并将对象放进池中 。 没当调用 方法时, ...
分类:
其他好文 时间:
2018-10-04 15:57:30
阅读次数:
157
Java虚拟机的基本结构如图所示 类加载子系统负责从文件系统或网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行是的常量池信息, 包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。 Java堆在虚拟机启动的 ...
分类:
编程语言 时间:
2018-10-03 21:57:57
阅读次数:
164
可能是把Java内存区域讲的最清楚的一篇文章 基本问题: 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题: String类和常量池 8种基本类型的包装类和常量池 ... ...
分类:
编程语言 时间:
2018-09-29 16:44:46
阅读次数:
242
前言 JVM内存区域包括 PC计数器、Java虚拟机栈、本地方法栈、堆、方法区、运行时常量池和 直接内存。 本文主要介绍各个内存区域的作用和特性,同时分别阐述各个区域发生内存溢出的可能性和异常类型。 正文 (一). JVM内存区域 Java虚拟机执行Java程序的过程中,会把所管理的内存划分为若干不 ...
分类:
其他好文 时间:
2018-09-24 13:48:09
阅读次数:
185
1. String 下面代码创建了几个对象? String s1 = new String("Hello"); String s2 = new String("Hello"); 要想答对这道题,需要考虑String的一个常量池的概念。在执行代码的时候,首先会判断字符串常量池中是否存在"Hello", ...
分类:
其他好文 时间:
2018-09-24 11:31:59
阅读次数:
117
本文来自 唐大麦 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/soonfly/article/details/70147205?utm_source=copy 在翻《深入理解Java虚拟机》的书时,又看到了2-7的 String.intern()返回引用的测试。 ...
分类:
其他好文 时间:
2018-09-23 19:14:55
阅读次数:
168
继续前面关于方法调用的话题,所有方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用,这种解析能成立的前提是:方法在程序真正运行之前就有一个可确定的调用版本,并且这个方法的调用版本在运行期是不可改变的。换句话说,调用目标在程序... ...
分类:
其他好文 时间:
2018-09-23 00:47:58
阅读次数:
180