包装类:
在Java中提倡一种概念:一切皆对象,任何时候都是以类或对象的形式出现,那么现在就出现了一个问题,基本数据类型是对象吗?肯定不是,所以JAVA中为了解决这样的矛盾,增加了八个包装类。
基本数据类型
|
包装类
|
int
|
Integer
|
char
|
Character
|
float
|
Float
|
double
|
Double
|
boolean
|
Boolean
|
byte
|
Byte
|
short
|
Short
|
long
|
Long
|
那么这些包装类有那些用处呢?
最终要的是在字符串转型的时候,例如:可以将一个字符串变为一个整数,或者将一个字符串变为一个小数。
例如:现在将一个字符串变为一个整数:
public class Demo14{
public static void main(String args[]){
String str = "123" ;
//
现在要把
String
变为
int
,则就要使用
Integer
Integer it1 = new Integer(str) ;
int i1 = it1.intValue() ;
System.out.println(i1*i1) ;
//
第二种比较常用
int i2 = Integer.parseInt(str) ;
System.out.println(i2*i2) ;
}
};
|
但是使用以上操作的时候必须有一个注意点:
要变为数字的字符串,里面必须全部是数字,否则是无法改变的。
例如:把一个字符串变为一个小数:
public class Demo15{
public static void main(String args[]){
String str = "123.3" ;
Float fl1 = new Float(str) ;
float f1 = fl1.floatValue() ;
System.out.println(f1) ;
float f2 = Float.parseFloat(str) ;
System.out.println(f2) ;
}
};
|
注意点:
在JDK 1.5中对于包装类有了更进一步的支持。
如果在JDK 1.4的时候如果要把一个基本类型变为包装类以及将包装类变为基本类型,必须按以下步骤:
public class Demo16{
public static void main(String args[]){
int i = 10 ;
//
将基本数据类型变为包装类
Integer in = new Integer(i) ;
//
可以将包装类变为基本数据类型
int j = in.intValue() ;
}
};
|
此时,有以下两个名词:
· 把基本数据类型变为包装类,称为装箱:Integer in = new Integer(i) ;
· 把包装类变为基本数据类型,称为拆箱:int j = in.intValue() ;
在JDK 1.5之后程序提供了自动的装箱和拆箱操作:
public class Demo17{
public static void main(String args[]){
int i = 10 ;
//
自动装箱
Integer in = i ;
//
自动拆箱
int j = in ;
// JDK 1.5
之后此种代码都是合理的了
in++ ;
}
};
|
思考题目:
现在要求设计一个坐标的类,坐标上有两个点:
point1
、
point2
,但是坐标有以下三种表现方式;
·
整数:
point1=30
;
point2=50
·
小数:
point1=30.3
;
point2=50.5
·
文字:
point1="
东经
180
度
"
;
point2="
北纬
360
度
"
问此类该如何设计?
肯定程序取得坐标是一套方法,设置坐标是一套方法。
class Point{
private String pstr1 ;
private String pstr2 ;
private int pint1 ;
private int pint2 ;
private float pfloat1 ;
private float pfloat2 ;
public void setP1(String p1){
this.pstr1 = p1 ;
}
public void setP2(String p2){
this.pstr2 = p2 ;
}
public void setP1(int p1){
this.pint1 = p1 ;
}
public void setP2(int p2){
this.pint2 = p2 ;
}
public void setP1(float p1){
this.pfloat1 = p1 ;
}
public void setP2(float p2){
this.pfloat2 = p2 ;
}
//
取得
public String getP1(){
return this.pstr1 ;
}
public int getP1(){
return this.pint1 ;
}
};
|
此时就可以发挥
JDK 1.5
所提供的一个新的特性
——
范型。
就是在声明的时候不指定具体的类型,而在运行的时候根据需要传入具体的类型。
class Point<T>{
// T
为
Type
的缩写,可以任意写
// T
的类型由外部决定
private T p1 ;
private T p2 ;
public void setP1(T p1){
this.p1 = p1 ;
}
public void setP2(T p2){
this.p2 = p2 ;
}
public T getP1(){
return this.p1 ;
}
public T getP2(){
return this.p2 ;
}
};
public class Demo19{
public static void main(String args[]){
// Point
中属性的类型在此决定
/*
Point<Integer> p = new Point<Integer>() ;
p.setP1(30) ;
p.setP2(50) ;
System.out.println("
坐标
1
:
"+p.getP1()) ;
System.out.println("
坐标
2
:
"+p.getP2()) ;
*/
/*
Point<Float> p = new Point<Float>() ;
p.setP1(30.3f) ;
p.setP2(50.5f) ;
System.out.println("
坐标
1
:
"+p.getP1()) ;
System.out.println("
坐标
2
:
"+p.getP2()) ;
*/
Point<String> p = new Point<String>() ;
p.setP1("
东经
180
度
") ;
p.setP2("
北纬
360
度
") ;
System.out.println("
坐标
1
:
"+p.getP1()) ;
System.out.println("
坐标
2
:
"+p.getP2()) ;
}
};
|
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91240,如需转载请自行联系原作者