java学习——基础入门(1)

本文为学习笔记,留作自用,不会记载的特别详细,如有错误,欢迎指正

 

1. 关于java中常用数据类型的长度

byte/1,char/2(因为java用的是Unicode编码,固定为2字节),short/2,

int/4(当时大多数系统为32位系统,涉及到组原和操作系统相关知识,4字节有助于加快计算速度),

float/4,long/8.double/8

 

2. 关于Integer以及缓存池

有以下样例(==未重写情况下自动判断两边是否为同一个对象)

java学习——基础入门(1)

 

 

 

 

 

 首先,引用类型Integer的初始化方法有2种,

(1)调用构造函数,会创建新的Integer对象

java学习——基础入门(1)

 

 

 

(2)valueOf函数

java学习——基础入门(1)

 

 

 

这里我们可以看到一个很有趣的地方,当i的范围在low和high之间,会直接返回一个

IntegerCache.cache数组中的元素,即已存在对象而不是重新创建一个对象,否则的话就重新创建。

我们把low,high之间的数组元素称作缓存池,当自动装箱的值在这个范围内时,返回的是同一个对象。

范围外则重新创建,因此不是同一个对象,所以z=k,g!=h

java学习——基础入门(1)

 

 

 

从上图的IntegerCache源码中,我们可以看到缓存池的上下限默认为(low)-128,(high)127

low是固定的,但hign是可以修改的,(下面这段是百度到的,仅作参考* : Differences between new Integer(123), Integer.valueOf(123) and just 123)

在 jdk 1.8 所有的数值类缓冲池中,Integer 的缓冲池 IntegerCache 很特殊,这个缓冲池的下界是 -
128,上界默认是 127,但是这个上界是可调的,在启动 jvm 的时候,通过 -XX:AutoBoxCacheMax=
<size> 来指定这个缓冲池的.大.小,该选项在 JVM 初始化的时候会设定.一个名为
java.lang.IntegerCache.high 系统属性,然后 IntegerCache 初始化的时候就会读取该系统属性来决定上
界。

 

2. String

(1)变与不变

String是final修饰的char数组,因此不可变,所以是线程安全的

SringBuilder、StringBuffer可变,前者线程不安全,后者相反

(2)关于字符串常量池

String源码中有一个方法public native String intern();(native意思大致为底层代码由C编写)

String的2种初始化方法因这个会产生差异。intern会向字符串常量池中创建元素。

第二种初始化方法会自动插入常量池,第一种则不会

java学习——基础入门(1)

 

上一篇:Integer-源码


下一篇:Java开发手册——【强制】所有整型包装类对象之间值的比较,全部使用 equals 方法比较