Java基本数据类型的封装
在Java中不能定义基本类型对象,为了能将基本类型视为对象进行处理,并能使用相关的方法,Java为每个基本类型都提供了包装类,使用包装类可以将基本类型转换为对象来处理。
基本数据类型的包装类
Java基本数据类型有四种,分别是整型、浮点型、布尔型和字符型,细分共8种;Java.lang包提供了相应的8种类,分别将基本类型的值包装在一个对象中。
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
java.math包:
- BigDecimal类:更为精确表示、计算浮点数;
- BigInteger类:提供了各种运算;
声明创建包装类对象
方法一:包装类类型 变量名=new 包装类构造方法(参数);
根据基本数据类型值创建包装类对象。
Integer i=new Integer(10); //根据基本类型参数创建包装类对象
Double d=new Double(3.14);
Integer i2=new Integer("10");//根据字符串参数创建包装类对象
Double d2=new Double("3.14");
方法二:包装类类型 变量名=包装类.valueOf(参数值);
格式:
public static XXX valueOf(YYY b)
public static XXX valueOf(String s)
public static XXX valueOf(String s,int radix)
radix --在解析字符串 s 时使用的进制数,用于指定使用的进制数。
功能:虽然方法的参数类型和个数不同,但通过valueOf()方法可以返回一个类的实例,即返回一个类对象。
通过包装类名直接调用静态方法valueOf():
Integer i=Integer.valueOf(10);
public class Test {
public static void main(String[] args) {
Long a=new Long(5);
System.out.println(a);//5
a=Long.valueOf(15);
System.out.println(a);//15
a=Long.valueOf("123",8);
System.out.println(a);//83
a=Long.valueOf("123");
System.out.println(a);//123
}
}
常用方法
(1)compareTo()方法
格式:public int compareTo(XXX a)
例如,对Integer类而言其compareTo()方法的格式是:public int compareTo(Integer a)
功能:在数字上比较两个Integer对象,如果该Integer在数值上等于Integer参数,则返回0值;如果该Integer在数值上小于Integer参数,则返回“-1”;如果Integer在数值上大于Integer参数,则返回“1”。
(2)equals()方法
格式:public boolean equals(Object obj)
功能:将此对象与指定对象进行比较。当且仅当参数不是null而是XXX对象,且表示的YYY值与此对象表示的YYY值相同时,结果为“true”。
Double类使用equals()方法和compareTo()方法:
public class Test {
public static void main(String[] args) {
Double a=new Double(5);
Double b=new Double(5);
Double c=new Double(-15);
System.out.println(a.equals(b));//true
System.out.println(a==b);//fslse
System.out.println(a.compareTo(c));//1
}
}
(3)toString() 方法
格式:public String toString()
功能:返回调用此方法的类对象的字符串表示形式。
格式:public static String toString(YYY s)
功能:返回表示指定YYY数据类型的一个新String对象,其中YYY表示8种基本数据类型。
Integer类使用toString()方法:
public class Test {
public static void main(String[] args) {
Integer i=new Integer(5);
System.out.println(i.toString());//5
System.out.println(Integer.toString(123));//123
}
}
(4)parseXXX()方法
public static int parseInt(String s)
:将字符串参数作为有符号的十进制整数进行解析。
public static int parseInt(String s, int radix)
:将字符串参数解析为有符号的radix进制整数。
public static int parseLong(String s)
:将字符串参数作为有符号的十进制长整数进行解析。
public static int parseBoolean(String s)
:将字符串参数解析为布尔值。
parseXXX()方法的使用:
public class Test {
public static void main(String[] args) {
System.out.println(Integer.parseInt("255"));//255
System.out.println(Integer.parseInt("11111111",2));//255
System.out.println(Integer.parseInt("11111111"));//11111111
System.out.println(Integer.parseInt("377"));//377
System.out.println(Integer.parseInt("377",8));//255
System.out.println(Integer.parseInt("ff",16));//255
}
}
(5)Character类特有的常见方法
public static boolean isDigit(char ch)
:确定指定字符是否为数字。
public static boolean isDigit(int codePoint)
:确定指定字符(Unicode 代码点)是否为数字。
public static boolean isLetter(char ch)
:确定指定字符是否为字母。
static boolean isLetter(int codePoint)
:确定指定字符(Unicode代码点)是否为字母。
static Boolean isLetterOrDigit(char ch)
:确定指定字符是否为字母或数字。
public static boolean isLetterOrDigit(int codePoint)
:确定指定字符(Unicode代码点)是否为字母或数字。
public static Boolean isLowerCase(char ch)
:确定指定字符是否为小写字母。
public static Boolean isLowerCase(int codePoint)
:确定指定字符(Unicode代码点)是否为小写字母。
public static Boolean isSpaceChar(char ch)
:确定指定字符是否为Unicode空白字符。
public static Boolean isUpperCase(char ch)
:确定指定字符是否为大写字母。
public static Boolean isUpperCase(int codePoint)
:确定指定字符(Unicode代码点)是否为大写字母。
public static char toLowerCase(char ch)
:将字符参数转换为小写。
public static int toLowerCase(int codePoint)
:将字符(Unicode代码点)参数转换为小写。
public static char toUpperCase(char ch)
:将字符参数转换为大写。
public static int toUpperCase(int codePoint)
:将字符(Unicode 代码点)参数转换为大写。
Character类常用方法的使用:
public class Test {
public static void main(String[] args) {
System.out.println("确定指定字符是否为数字:");
System.out.println(Character.isDigit('1'));
System.out.println(Character.isDigit('b'));
System.out.println(Character.isDigit(97));
System.out.println(Character.isDigit(48));
System.out.println("确定指定字符是否为字母:");
System.out.println(Character.isLetter('1'));
System.out.println(Character.isLetter('b'));
System.out.println(Character.isLetter(97));
System.out.println(Character.isLetter(48));
System.out.println("确定指定字符是否为字母或数字:");
System.out.println(Character.isLetterOrDigit('1'));
System.out.println(Character.isLetterOrDigit(97));
System.out.println(Character.isLetterOrDigit('*'));
System.out.println("确定指定字符是否为小写字母:");
System.out.println(Character.isLowerCase(97));
System.out.println(Character.isLowerCase(65));
System.out.println(Character.isLowerCase('a'));
System.out.println("确定指定字符是否为Unicode空白字符:");
System.out.println(Character.isSpaceChar('A'));
System.out.println(Character.isSpaceChar(' '));
System.out.println("确定指定字符是否为大写字母:");
System.out.println(Character.isLowerCase(97));
System.out.println(Character.isLowerCase(65));
System.out.println(Character.isLowerCase('a'));
System.out.println("将字符参数转换为小写");
System.out.println(Character.toLowerCase(97));
System.out.println(Character.toLowerCase(65));
System.out.println(Character.toLowerCase('a'));
System.out.println("将字符参数转换为大写");
System.out.println(Character.toUpperCase(97));
System.out.println(Character.toUpperCase(65));
System.out.println(Character.toUpperCase('a'));
}
}
本程序的运行结果是:
确定指定字符是否为数字:
true
false
false
true
确定指定字符是否为字母:
false
true
true
false
确定指定字符是否为数字:
true
false
false
true
确定指定字符是否为字母:
false
true
true
false
将字符参数转换为小写
97
97
a
将字符参数转换为大写
65
65
A
(6)获取对象内包装的基本类型值的方法
byteValue()
shortValue()
intValue()
longValue()
floatValue()
doubleValue()
Integer obj=new Integer(10086);
int i=obj.intValue();
System.out.println(i);
自动拆箱和装箱
在JDK5.0版本之前,数学运算表达式中的操作数必须是基本数据类型,并且运行结果也是基本数据类型,包装类和基本类型是不允许进行混合数学运算的,如果想运算,必须要通过拆箱将包装类对象转换为基本数据类型的值才可以。
JDK5.0版本中提供了自动拆箱和装箱技术,可以自动进行基本数据类型和包装对象之间的转换。
(1)自动装箱
自动装箱:将基本数据类型自动转换为包装类对象
Integer a=10;//自动创建一个Integer类型对象,将10封装在对象中,并将该对象的内存地址赋给引用变量a.
Integer a=Integer.valueOf(10);
(2)自动拆箱
自动拆箱:从对象的内部自动取出包装的值
Integer a=10;
int i=a;//找到引用变量a引用的对象,并将该对象中的值取出赋给i。
int i=a.intValue();
Integer a=10;
a=a+1;
a=Integer.valueOf(a.intValue()+1);
先把数字10拆箱出来,再进行加运算,然后自动创建对象封装11,重新装箱,最后把内存地址赋给a。
注意:自动拆箱时应注意null值,如果a为null,找不到对象,无法取值。