一、为什么会有八大包装类
packagepackType.Integer;
public class IntegerTest01{
public static void main(String[]args){
}
public void doSome(Object obj){
System.out.println(obj);
}
}
我现在想要往doSome()中传查询入进去一个数字,但是数字属于基本数据类型,而doSome()方法参数的类型时Object。可见Object方法无法接受基本数据类型的数字。那么该怎么办?
这时候,就需要把基本属于类型包装一下了,这时候可以传一个数字对应的包装类进去,所以可以这样写:
packagepackType.Integer;
public class MyMath{
private int no;
public MyMath(intno){
this.no=no;
}
public MyMath(){
}
public int getNo(){
returnno;
}
public void setNo(intno){
this.no=no;
}
@Override
public String toString(){
return String.valueOf(no);
}
}
结果为
10
但是在实际开发过程中,我们不需要自己写,SUN公司已经帮我们写好了。
8中基本数据类型不够用,所以又提供了包装类
二、八种包装类型
基本数据类型 |
包装类型 |
byte |
Java.lang.Byte |
short |
Java.lang.Short |
Ing
|
Java.lang.Integer |
Long |
Java.lang.Long |
Float
|
Java.lang.Float |
double |
Java.lang.Double |
boolean |
Java.lang.Boolean |
Char |
Java.lang.Character |
三、Integer
(1)Integer构造方法
packagepackType.Number;
public class IntegerTest02{
public static void main(String[]args){
Integer n1=new Integer(100);
System.out.println(n1);
Integer n2=new Integer("123");
System.out.println(n2);
}
}
(2)Integer中的方法
(a)将字符串转变为int类型
packagepackType.Number;
public class NumberTest06{
public static void main(String[]args){
int retValue=Integer.parseInt("123");
System.out.println(retValue+100);
}
}
//网页上文本框中输入的100实际上是“100”字符串,后台数据库中要求100数字,此时java程序需要进行转换。这时候就需要parseInt方法。
(b)获取最大值和最小值
packagepackType.Number;
public class IntegerTest03{
public static void main(String[]args){
System.out.println("int的最大值"+Integer.MAX_VALUE);
System.out.println("int的最小值"+Integer.MIN_VALUE);
}
}
结果为
int的最大值为2147483647
int的最小值为-2147483648
(3)装箱和拆箱
packagepackType.Number;
public class NumberTest01{
public static void main(String[]args){
//100这个基本数据类型,进行构造方法的包装达到了:基本数据类型向引用数据类型的转换
//基本数据类型-->引用数据类型(装箱)
Integer i =new Integer(100);
//将引用数据类型-->基本数据
float f=i.floatValue();
System.out.println(f);
//将引用数据类型--转换为-->基本数类型(拆箱)
intt=i.intValue();
System.out.println(t);
}
}
(3)自动装箱和自动拆箱
(a)
自动装箱:基本数据类型自动转化成包装类。
自动拆箱:包装类型自动转换成基本数据类型。
Integer x = 900;
System.out.println(x);
900是基本数据类型
x是包装类型
基本数据类型--(自动转换)-->包装类型:自动装箱
Int y =x;
System.out.println(y);
x是包装类型
y是基本数据类型
包装类型--(自动转换)-->基本数据类型:自动拆箱
(b)
Integer z = 1000;
System.out.println(z+1);
分析为什么没有报错?
因为自动拆箱机制
(c)
Integer a =1000;
Integer b =1000;
System.out.println(a==b);//false
==这个运算符不会自动拆箱
(d)
java中为了提高程序的执行效率,将-128~127之间的所有包装对象提前创建好了,放到了一个方法区
的“整数型常量池”当中了,目的是只要用这个区间的数据不需要再new了,直接从整数型常量池当中取出来。
packagepackType.Number;
public class IntegerTest05{
public static void main(String[]args){
Integer a =128;
Integer b =128;
System.out.println(a==b);
Integer x =127;
Integer y =127;
System.out.println(x==y);
Integer x1 = 126;
Integer x2 = 126;
System.out.println(x1==x2);
}
}
结果为:
false
true
true
四、Integer、int、String的转换
总结:其实我感觉Integer和String以及引用类型其实是一样的,唯一的区别就是Integer在方法区有一个整数型常量池,String在方法区有一个字符串型常量池。这些常量池也就是缓存,目的是更快的开发,提高方便率。Integer在方法区的取值范围为-128~127.也就是说,如果我两个Integer变量都是为127,他们的equals方法是一样的,因为他们指向的地址是一样的,如果超过了这个范围,也就需要在堆中创建对象,然后对象地址不一样,自然变量指向对象的地址也就不一样了。