java中的包装类
-
java中对8种基本数据类型提供了8种包装类型;包装类是引用类型,父类是Object。
-
为什么要提供8种包装类型?
- 因为8种基本数据类型不够用,所以SUN公司又提供了对应的8种包装类型。
基本数据量类型 包装类型 包装类的父类 byte java.lang.Byte Number short java.lang.Short Number int java.lang.Integer Number long java.lang.Long Number float java.lang.Float Number double java.lang.Double Number boolean java.lang.Boolean Object char java.lang.Character Object -
以上8种包装类型,重点以java.lang.Integer为代表进行讲解,其他类型照葫芦画瓢就可以。
-
Integer类有两个构造方法:
- Integer(int)
- Integer(String)
-
8种包装类型中其中6个都是数字对应的包装类,他们的父类都是Number,可以先看下Number类中的公共方法:
-
Number是一个抽象类,无法实例化对象。
-
Number类中有这样的方法:
byte byteValue() 以 byte 形式返回指定的数值。 abstract double doubleValue() 以 double 形式返回指定的数值。 abstract float floatValue() 以 float 形式返回指定的数值。 abstract int intValue() 以 int 形式返回指定的数值。 abstract long longValue() 以 long 形式返回指定的数值。 short shortValue() 以 short 形式返回指定的数值。
-
这些方法其实所有的数字包装类的子类都有,这些方法是负责拆箱的。
-
-
在Java5、JDK1.5之后,引入了新特性,自动装箱和自动拆箱。(方便编程)
- 自动装箱:基本数据类型自动转换成包装类。
- 自动拆箱:包装类自动转换成基本数据类型。
代码示例讲解方式,请多多练习。
import java.lang.String;
public class packageTest01 {
public static void main(String[] args) {
// 有种需求,调用doSome()方法的时候要求传一个数字进去。
// 但是数字属于基本数据类型,doSome()方法的参数类型是Object.
// doSome()方法无法接受基本数据类型的数字,这时候可以传一个数字对应的包装类进去。
// 把30这个数字经过构造方法包装成对象。
MyInt myInt = new MyInt(30);
// doSome()方法虽然不能直接传30,但是可以传一个30对应的包装类型。
doSome(myInt);
// 以上是为了方便理解包装类,自己写的;实际开发中不用自己写;
// SUN公司提供了对应的8种包装类型,直接使用就可以了。
//-------------------------------------------------------------------------
// 123是基本数据类型,进行构造方法包装达到了:基本数据类型向引用数据类型的转换。
// 将 基本数据类型(转换为)--> 引用数据类型 (装箱)
Integer i = new Integer(123);
// 将 引用数据类型(转换为)--> 基本数据类型 (拆箱)
int retValue = i.intValue();
System.out.println(retValue);
// 通过访问包装类的常量,来获取最大值和最小值
System.out.println("int最大值:" + Integer.MAX_VALUE);// int最大值:2147483647
System.out.println("int最小值:" + Integer.MIN_VALUE);// int最小值:-2147483648
System.out.println("byte最大值:" + Byte.MAX_VALUE);// byte最大值:127
System.out.println("byte最小值:" + Byte.MIN_VALUE);// byte最小值:-128
//-------------------------------------------------------------------------
// 在JDK1.5之后,支持自动拆箱和自动装箱了。
// 自动装箱 基本数据类型-->引用数据类型
Integer a = 100;
// 自动拆箱 引用数据类型-->基本数据类型
int b = a;
System.out.println(a+","+b);
//-------------------------------------------------------------------------
// 分析以下程序
Integer c = 128;
Integer d = 128;
System.out.println(c == d);//false
/**
* java中为了提高程序的执行效率,将[-128-127]之间的所有包装对象提前创建好,放到一个方法区的
* "整数型常量池"当中了,只有是用这个区间的数据不需要再new了,直接从整数型常量池中取出来。
*/
// 原理:e变量中保存的对象内存地址和f变量中保存的对象内存地址是一样的。
Integer e = 127;
Integer f = 127;
// == 永远判断的都是两个对象的内存地址是否相同。
System.out.println(e == f);// true
//-------------------------------------------------------------------------
// Integer常用方法
// static int parseInt(String s)
// 静态方法,传参String,返回int
int res = Integer.parseInt("1234"); // String-->int
System.out.println(res + 100);// 1334
double d1 = Double.parseDouble("3.14");
System.out.println(d1 + 1);// 4.140000000000001(精度问题)
// static String toBinaryString(int i)
// 静态的 ,将十进制转换成二进制字符串。
System.out.println(Integer.toBinaryString(11));// 1011
// static String toHexString(int i)
// 静态的 ,将十进制转换成十六进制字符串。
System.out.println(Integer.toHexString(11));// b
System.out.println(Integer.toHexString(17));// 11
// static String toOctalString(int i)
// 静态的 ,将十进制转换成八进制字符串。
System.out.println(Integer.toOctalString(8));// 10
System.out.println(Integer.toOctalString(10));// 12
// static Integer valueOf(int i)
// static Integer valueOf(String s)
// 静态的 int/String --> Integer
System.out.println(Integer.valueOf(11)); // 11
System.out.println(Integer.valueOf("11"));// 11
//-------------------------------------------------------------------------
// String int integer之间相互转换
// String -- >int
String ss = "100";
int i1 = Integer.valueOf(ss);
System.out.println(i1 + 1); // 101
// int -- >String
String ss1 = i1 + "";
System.out.println(ss1 + 1);// 1001
// int -- >integer
Integer itg = 1000;
System.out.println(itg + 1);// 1001
// integer -- >int
int i2 = itg;
System.out.println(i2 + 1);// 1001
// String -- >integer
Integer itg2 = Integer.valueOf(ss);
System.out.println(itg2 + 1);// 101
// integer -- >String
String ss2 = String.valueOf(itg2);
System.out.println(ss2 + 1);// 1001
}
private static void doSome(Object obj) {
System.out.println(obj);
}
}
class MyInt {
int value;
public MyInt() {
}
public MyInt(int value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
网友评论