Java中的常用类(2)—八大包装类、Integer运行原理

一、为什么会有八大包装类

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构造方法

    • Constructor and Description
      Integer(int value)

      构造一个新分配的 Integer对象,该对象表示指定的 int值。

      Integer(String s)

      构造一个新分配 Integer对象,表示 int由指示值 String参数。


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类型

  • static int
  • parseInt(String s)
  • 将字符串参数解析为带符号的十进制整数。
	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方法是一样的,因为他们指向的地址是一样的,如果超过了这个范围,也就需要在堆中创建对象,然后对象地址不一样,自然变量指向对象的地址也就不一样了。 

猜你喜欢

转载自blog.csdn.net/MyxZxd/article/details/106079027