基本数据类型包装类

基本数据类型包装类

基本数据类型(8)
	数值型:byte、short、int、long、float、double
	字符型:char
	布尔型:boolean
	基本数据类型都是存储栈中,栈中存储的就是值本身,赋值、参数传递的时候操作的也是值本身。
	Java是面向对象的,对象都有属性和方法,基本数据类型只有值,没有方法,不遵循面向对象。Java为了完善,为了提供更多的方法去操作基本数据数据
	就提供出来了包装类。
包装类:
	byte--- Byte
	short---Short
	int 	Integer
	long	Long
	float	Float
	double	Double
	char	Character
	boolean Boolean
	除了int--Integer、char--Character,其它的都是首字母变大小

包装类的继承关系
Object
	--Number(abstract父类)
		--Byte、Short、Integer、Long、Float、Double
	--Character
	--Boolean

Integer以此为例
	public final class Integer extends Number implements Comparable<Integer>
	1、final 不能继承
	2、extends Number 未继承很多功能
	3、Comparable<Integer>  可比较的   Arrays.sort()
		 public int compareTo(T o);
		 返回值:负数:小于   正数:大于   0:等于
	
	属性  field
		MIN_VALUE -2147483648   -2^31
		MAX_VALUE 2147483647 
		TYPE 获取int类对象
		SIZE = 32;   int数据占32位
		BYTES = SIZE / Byte.SIZE  int数据占多少字节
		
		程序中使用的话,直接用常量,可以节约资源
		
		private final int value; 存储的就是Integer类的数据,本质上就是int value
		value一旦赋值,不能更改,靠什么达到像String对象的共享?---稍后
		
	构造	
	Integer(int value) 
	Integer(String s)---要求s必须能转换成int,否则NumberFormatException: For input string: "a25"
	
	方法
	static int parseInt(String s)
	static int parseInt(String s, int radix) 就是把字符串转换成int ,radix进制可选
	不支持Integer.parseInt("0x10",16) 但是Integer.parseInt("10",16)
	------------------------------------------------------------------
	static Integer valueOf(String s) 、
	static Integer valueOf(int i)
	valueOf系列方法,把其它数据类型转换成当前类型
	
	
	public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
    以上方法意思就是,如果传入的整数是-128-high之间的数,直接从缓存中返回对象。否则新创建
     原来,Integer类中有一个静态内部类  IntegerCache,内部类中有一个cache,当Integer加载的时候,就会初始化此类,缓存
  -128-high(一般就是127)之间的数。
  
  如果你需要Integer类型的对象,优先使用valueOf,而不是构造方法
  
  其它包装类?
  public static Float valueOf(float f) {
        return new Float(f);
  }
 Float、Double类的valueOf()没有缓存。为什么不呢?[-128-127] 整数数量是固定的,小数是无穷的。
  
  Boolean类
  public static final Boolean TRUE = new Boolean(true);
  public static final Boolean FALSE = new Boolean(false);
  
  总结:
  1、Byte、Short、Integer、Long的valueOf方法都有缓存,【-128,127】
  2、Float、Double的valueOf方法没有缓存,每次都会新创建对象
 3、Character 的valueOf方法 有缓存,【0,127】
 4、Boolean 的valueOf方法 有缓存,有静态的常量true,false,直接返回
 
 -------------------------------------
		
xxx(基本数据类型) xxxValue()  获取包装类中的基本数据类型的值 value

-------------
toString()
static String toString(int i)---建议看源码

------------
equals方法主要来判断值是否相等 
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}
Integer 中equals方法:当类型相同且值相等,才返回true

-----------------
进制间转换  把10进制的数转换成其它进制
static String toHexString(int i)  --16进制
static String toOctalString(int i) --8进制
static String toBinaryString(int i)--2进制

------
static int reverse(int i) 反转 不是这样的效果123---321

总结:1、数据类型转换
	int--String
		1)a+""
		2)String.valueOf()
		3)Interger:String toString(int i)
	String--int
		1)Integer.parse(String)
	
	Integer-String
		1)toString()
		
	String--Integer
		1)Integer valueOf(String s, int radix)
		2)Integer(String s)
	
	int--Integer
		1)Integer(int i)
		2)Integer valueOf(int i)
	Integer--int
		1)int intValue()
		
	2、进制转换
	------------------------
	
	
	装箱:基本数据类型--->包装类型  自动转换
	本质:Integer.valueOf()
	Integer i=12;
	Integer i2=Integer.valueOf(12);
	以上代码效果相同
	
	---
	Integer num1=12;
	Integer num2=12;
	System.out.println(num1==num2);//true
	说明num1和num2地址相同,因为num1和num2都是从缓存中取的同一个地址
	
	--
	Integer num1=129;
	Integer num2=129;
	System.out.println(num1==num2);//false
	129没有缓存,每次都需要重写创建,所以num1和num2地址不同
	--
	Double num1=12d;
	Double num2=12d;
	System.out.println(num1==num2);//false
	因为Double 没有缓存
	
	拆箱:包装类型--基本类型  自动转换
	本质:Integer.intValue()
	int num=i;//拆箱
	
	注意:如果可以的话,不要频繁地装拆箱
	
	什么时候装箱、拆箱?
	Integer num1=400;
	int num2=400;
	System.out.println(num1==num2);//true
	返回true就可以说明num1发生了拆箱操作。换一句话来说,==链接包装类和基本数据类型的时候,就拆箱
	
	Integer num1=400;
	int num2=400;
	System.out.println(num1.equals(num2));//true
	返回true就可以说明num2进行了拆箱  
	
	Long num1=400l;
	int num2=400;
	System.out.println(num1.equals(num2));//false
	原因:long类型的equals方法要求类型相同且值相同才返回true,而num2自身装箱成了Integer类型
	
	Integer num1=400;
	int num2=400;
	System.out.println(num1*num2);
	当+、-、*、/、%链接包装类和基本数据类型的时候,是拆箱
	
	
	拆箱的时候注意避免空指针异常
	Integer num1=null;
	int num2=num1;//java.lang.NullPointerException
	就是拆箱实际在执行intValue()
	

Character
	System.out.println(Character.isDigit('a'));
	System.out.println(Character.isLetter('a'));
	System.out.println(Character.isWhitespace(' '));
	System.out.println(Character.isUpperCase('A'));
	System.out.println(Character.isLowerCase('b'));
	System.out.println(Character.toLowerCase('U'));
	

BigInteger
	做权限控制
	BigInteger setBit(int n)  bi+2^n
	boolean testBit(int n)
BigDecimal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值