8种基本数据类型对应类

出现原因:Java为纯面向对象语言(万物皆对象),8种基本数据类型不能new对象。 就破坏了Java为纯面向对象语言的特征,所以Java又为8种基本数据类型 分别匹配了对应的类,这种类叫做包装类/封装类

包装类_System

//手动装箱:基本数据类型 -> 包装类
	    int value = 100;
		Integer integer = Integer.valueOf(value);
		System.out.println(integer);
		
		//手动拆箱:包装类 -> 基本数据类型
		int intValue = integer.intValue();
		System.out.println(intValue);
		
		//JDK1.5新特性:自动拆装箱
	
		//自动装箱:基本数据类型 -> 包装类
		int value = 100;
		Integer integer = value;//底层实现:Integer.valueOf(value);
		System.out.println(integer);
		
		//自动拆箱:包装类 -> 基本数据类型
		int intValue = integer;//底层实现:integer.intValue();
		System.out.println(intValue);
		
		//将字符串转换为int值
		String str = "123";
		int parseInt = Integer.parseInt(str);//相当于自动拆箱
		System.out.println(parseInt);

深入Integer底层原理

public static void main(String[] args) {
		
		Integer integer1 = Integer.valueOf(100);//在-128 - 127之间
		Integer integer2 = Integer.valueOf(100);
		System.out.println(integer1 == integer2);//true
		
		Integer integer3 = Integer.valueOf(200);//不在-128 - 127之间
		Integer integer4 = Integer.valueOf(200);
		System.out.println(integer3 == integer4);//false
		
		System.out.println(integer1);
		System.out.println(integer2);
		System.out.println(integer3);
		System.out.println(integer4);
		
		System.out.println("--------------------");
		
		MyInteger myInteger1 = MyInteger.valueOf(100);
		MyInteger myInteger2 = MyInteger.valueOf(100);
		System.out.println(myInteger1 == myInteger2);//true
		
		MyInteger myInteger3 = MyInteger.valueOf(200);
		MyInteger myInteger4 = MyInteger.valueOf(200);
		System.out.println(myInteger3 == myInteger4);//false
		
		System.out.println(myInteger1);
		System.out.println(myInteger2);
		System.out.println(myInteger3);
		System.out.println(myInteger4);
	}
public class MyInteger {
	
	private int value;

	public MyInteger(int value) {
		this.value = value;
	}
	
	public int intValue(){
		return value;
	}
	
	public static MyInteger valueOf(int i){
		if(i>=MyIntegerCache.low && i<=MyIntegerCache.high){
			return MyIntegerCache.cache[i - MyIntegerCache.low];
		}
		return new MyInteger(i);
	}
	
	@Override
	public String toString() {//重写toString方法
		return String.valueOf(value);
	}
	
	//缓存类
	private static class MyIntegerCache{
		
		private static final int low = -128;
		private static final int high = 127;
		private static final MyInteger[] cache;
		
		static{
			
			cache = new MyInteger[high - low];
			int j = low;
			for (int i = 0; i < cache.length; i++) {
				cache[i] = new MyInteger(j++);
			}
		}
		
	}