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,找不到对象,无法取值。

猜你喜欢

转载自juejin.im/post/7068451157974188045