版权声明:欢迎转载.转载请注明出处 https://blog.csdn.net/zhaluo_dehezi/article/details/85052076
包装类的简单介绍:
- java 8种基本数据类型 对应 8中基本包装类
- 除了Char 对应Character, int对应Integer之外.其他6种基本数据类型对应的都是首字母大写
java不同版本对包装类的加强
- JDK 1.5 之前
- 把基本数据类型转换成包装类型都是使用构造方法
- 8个包装类中除了character之外.还可以通过传入一个字符串参数来构建包装类
- 包装类转成基本数据类型可以使用包装类的
XXXValue()静态方法[已经过时]
- JDK 1.5 之后提供了自动装箱与拆箱的功能
- 自动装箱
- 可以把一个基本数据类型的值.直接赋值给包装类
- 自动拆箱
- 把一个包装类的值.直接赋值给一个基本数据类型
- 自动装箱
- 除了自动装箱与自动拆箱以外.包装类还可以与String 进行相互转换
- String 转基本数据类型
- 包装类提供的静态方法 parseXXX(String s),
- 除了Character 之外所有的方法都提供了该方法;
- 包装类提供的XXX(String s) 构造器
- 利用String重载的多个valueOf()方法;
- String 转基本数据类型
- JDK 1.7 版本之后又给所有的包装类添加了一个 compare(xxx,xxx)方法.用于比较两个参数的大小
- 大于 返回 1
- 等于返回 0
- 小于返回 -1
- 值得一提的是Date日期了也有这个方法
- JDK .17 除了compare之外,还给character 增加了大量的工具方法来进行判断
- JDK 1.8 版本再次加强了这些包装类的功能.为整型包装类支持无符号算数运算.
详见jdk API
实例代码
package com.example.javademo.Wrapper;
import org.junit.Test;
/**
* 本篇主要演示包装类与基本数据类型的自动装箱与自动拆箱
*
* @author 扎罗
* @version 1.0
* @since 2018年12月21日
*/
public class AutoBoxAndAutoUnBox {
/**
* 演示自动装箱与拆箱
*/
@Test
@SuppressWarnings("all")
public void autoBoxAndAutoUnBoxTest() {
int b = 12;
// 自动装箱
Integer i = b;
//自动拆箱
int a = i;
// JDK 1.5 以前 基本数据类型转成包装类的方式;都是依赖够着方法
Integer c = new Integer(12);
Integer d = new Integer("12");
// JDK 1.5 以前 包装类转成基本数据类型
int cc = c.intValue();
int i1 = d.intValue();
}
@Test
public void stringTest() {
//String 转 基本数据类型
char c1 = 'c';
int i2 = 123;
long l1 = 12341239L;
byte b1 = 1;
double d1 = 12.1d;
float f1 = 1212.11f;
boolean bo1 = false;
//String 提供的重载的valueOf() 方法
String s1 = String.valueOf(i2);
String s2 = String.valueOf(l1);
String s3 = String.valueOf(b1);
String s4 = String.valueOf(d1);
String s5 = String.valueOf(f1);
String s6 = String.valueOf(bo1);
String s7 = String.valueOf(c1);
System.out.println("=======int 转 String : " + s1);
System.out.println("=======long 转 String : " + s2);
System.out.println("=======double 转 String : " + s4);
System.out.println("=======boolean 转 String : " + s6);
// 包装类提供的parseXXX()与构造器();
int i3 = Integer.parseInt(s1);
System.out.println("======Integer parseInt()" + i3);
double v = Double.parseDouble(s4);
System.out.println("======Integer parseInt()" + v);
//基本类型装字符串.最简单的方法 + "";
String ss = d1+"";
}
/**
* Integer 的特殊性
* Integer缓存设计 -128~127 刚好是short的范围
*/
@Test
public void integerTest(){
int i1 = 12;
Integer i2 = 129;
System.out.println("=====缓存以外的integer实例比较" + (i1==i2));
/*
这两个明明看起来数字相等.但是输出的结果却为false;
原因就在于Integer 缓存的设计.
在 -128 ~ 127 的数字都是取自缓存.但是不在这个范围内的==就属于比较地址值了.
所以不相等
*/
Integer i3 = 129;
System.out.println("缓存以外的Integer实例进行比较"+(i2==i3));
}
/**
* JDK 7 新增的compare 方法
* 返回结果 1 代表 大于
* 0 代表 等于
* -1代表 小于
*/
@Test
public void compareTest(){
/*
*比较特殊的boolean的比较
*/
System.out.println(Boolean.compare(true,false)); //1
System.out.println(Boolean.compare(false,false)); //0
System.out.println(Boolean.compare(false,true)); //-1
System.out.println(Boolean.compare(true,true)); //0
System.out.println("===========================");
Integer i = 10;
Integer s = 1222;
System.out.println(Integer.compare(i,s)); //-1
}
}