Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

数据类型包装
为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作。用于描述该对象的类就称为基本数据类型对象包装类
将一个字符串转化成一个Integer对象,然后再调用这个对象的intValue()方法返回其对应的int数值
int i=Integer.valueOf(“123”).intValue()
将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值
float f=Float.valueOf(“123”).floatValue()
将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
boolean b=Boolean.valueOf(“123”).booleanValue()
将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
double d=Double.valueOf(“123”).doubleValue()
将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
long l=Long.valueOf(“123”).longValue()
将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。
char=Character.valueOf(“123”).charValue()
基本类型转换成字符串
Integer类
Integer 类在对象中包装了一个基本类型 int 的值 该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法,需要注意的是字符串必须是由数字字符组成。
public Integer(int value)public Integer(String s)
运算符
public static void main(String[] args) {int number = 10;printInfo(number);number = number << 1;//左移一位printInfo(number);number = number >> 2;//右移一位printInfo(number);number = number >>> 1;printInfo(number);number = -10;printInfo(number);number = number << 1;//左移一位printInfo(number);number = number >> 2;//右移一位printInfo(number);number = number >>> 1;printInfo(number);}private static void printInfo(int num) {System.out.printf("%d-----%s\n",num,Integer.toBinaryString(num));}
基本类型
- byte/8
 - char/16
 - short/16
 - int/32
 - float/32
 - long/64
 - double/64
 - boolean/~
 
boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,但是是通过读写 byte 数组来实现的。
- Primitive Data Types
 The Java® Virtual Machine Specification
包装类型
基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。
Integer x = 2; // 装箱 调用了 Integer.valueOf(2)
int y = x; // 拆箱 调用了 X.intValue()- 
缓存池
new Integer(123) 与 Integer.valueOf(123) 的区别在于:
 new Integer(123) 每次都会新建一个对象;
- Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。
 
Integer x = new Integer(123);
Integer y = new Integer(123);
System.out.println(x == y);    // false
Integer z = Integer.valueOf(123);
Integer k = Integer.valueOf(123);
System.out.println(z == k);   // true
valueOf() 方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
在 Java 8 中,Integer 缓存池的大小默认为 -128~127。
static final int low = -128;
static final int high;
static final Integer cache[];
static {
    // high value may be configured by property
    int h = 127;
    String integerCacheHighPropValue =
        sun.misc.VM.getSavedProperty(“java.lang.Integer.IntegerCache.high”);
    if (integerCacheHighPropValue != null) {
        try {
            int i = parseInt(integerCacheHighPropValue);
            i = Math.max(i, 127);
            // Maximum array size is Integer.MAX_VALUE
            h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
        } catch( NumberFormatException nfe) {
            // If the property cannot be parsed into an int, ignore it.
        }
    }
    high = h;
cache = new Integer[(high - low) + 1];<br /> int j = low;<br /> for(int k = 0; k < cache.length; k++)<br /> cache[k] = new Integer(j++);// range [-128, 127] must be interned (JLS7 5.1.7)<br /> assert IntegerCache.high >= 127;<br />}<br />编译器会在自动装箱过程调用 valueOf() 方法,因此多个值相同且值在缓存池范围内的 Integer 实例使用自动装箱来创建,那么就会引用相同的对象。<br />Integer m = 123;<br />Integer n = 123;<br />System.out.println(m == n); // true<br />基本类型对应的缓冲池如下:
- boolean values true and false
 - all byte values
 - short values between -128 and 127
 - int values between -128 and 127
 - char in the range \u0000 to \u007F
 
在使用这些基本类型对应的包装类型时,如果该数值范围在缓冲池范围内,就可以直接使用缓冲池中的对象。
在 jdk 1.8 所有的数值类缓冲池中,Integer 的缓冲池 IntegerCache 很特殊,这个缓冲池的下界是 - 
128,上界默认是 127,但是这个上界是可调的,在启动 jvm 的时候,通过 -XX:AutoBoxCacheMax=
StackOverflow : Differences between new Integer(123), Integer.valueOf(123) and just 123

