Java

Java基本数据类型的封装

2022-02-25  本文已影响0人  马佳乐

在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包:

声明创建包装类对象

方法一:包装类类型 变量名=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,找不到对象,无法取值。

上一篇下一篇

猜你喜欢

热点阅读