Java知识点--包装类

Java知识点–包装类

Java作为一种面向对象的语言,但是他包含了8种基本数据类型,这8种基本数据类型不支持面向对象编程的机制:
1.基本数据类型的数据不具备“对象”的特性:没有成员变量,方法可以被调用
2.违背了Object作为所有类的父类的原则,即8个基本变量不可以被作为Object类型的问题
参考表:

基本数据类型包装类
btyeByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean
基本变量类型
WarpperClass.valueOf方法
WarpperInstance.xxxvalue方法
包装类对象

上述流程为jdk1.5之前尚未引入自动装箱/拆箱的写法,自jdk1.5之后,jdk引入引入自动装箱/拆箱,写法就简单多了
我们可以写形如 包装类 包装类对象=基本数据类型对象 的写法

但是值得强调的是:
包装类必须要与基本数据类型对应

下面介绍基本类型变量和String的转换

基本变量类型
String.valueOf方法
WarpperInstance.parseXxx方法
String对象

小技巧:
可以通过+""的方式转换为字符串

int a=0;
String parseByInt=a+"";

关于包装类的比较问题

//下面代码输出false
System.out.println(Integer.valueOf(2)==Integer.valueOf(2));
//有过基础的知道,Integer作为引用类型,==的实质是比较地址

再看一种情况

Integer a=2;
Integer b=2;
//下面代码输出true
System.out.println(a==b);
Integer ba=128;
Integer bb=128;
//下面会输出false
System.out.println(ba==bb);

看似相同的代码为什么比较结果大相径庭呢,我们阅读一下源码

static final Integer[] cache=new Integer[-(-128)+127+1];
static{
	for(int i=0;i<cache.length;i++){
		cache[i]=new Integer(i-128);
	}
}

不难发现,当我们的数据在-128~127之间时,我们引用了jdk提供的一个数组,所以,打我们比较在这个范围之间的数字时,并未感觉有什么不同,但是,当我们比较不在这个范围的数字时,要当心了

其实,在jdk7之后,所有的包装类又提供了compare(xxx val1,xxx val2)方便我们去比较
对于Boolean(true>false)

jdk8之后,包装类Integer,Long,Byte,Short又多了新方法(无符号运算)
1.static String toUnsignedString(int/ong i);
2.static String toUnsignedString(int/ong i,int radix);(radix进制,下同)
3.static xxx parseUnsignedXxx(String s);
4.static xxx parseUnsignedXxx(String s,int radix);
5.static int compareUnsigned(xxx x,xxx y);
6.下面方法可以把Byte和Short转换为无符号的int或者long,这个方式会把最高位不作为符号位
toUnsignedInt(xxx x);
toUnsignedLong(yyy x);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值