首页 > 编程语言 > 详细

java--数据类型包装类

时间:2021-05-27 11:30:46      阅读:32      评论:0      收藏:0      [点我收藏+]

java 基本数据类型

一般情况下我们会使用数据的基本数据类型:byte、int、short、long、double、float、boolean、char;
对应的包装类型也有八种:Byte、Integer、Short、Long、Double、Float、Character、Boolean;

包装类型都是用final声明了,不可以被继承重写;
在实际情况中编译器会自动的将基本数据类型装箱成对象类型,或者将对象类型拆箱成基本数据类型;

 

 

技术分享图片

public abstract class Number implements java.io.Serializable

Number 是一个抽象类,也是一个超类(即父类)。Number 类属于 java.lang 包,所有的包装类(如 Double、Float、Byte、Short、Integer 以及 Long)都是抽象类 Number 的子类。

Number类的方法
方法说明
byte byteValue();   返回 byte 类型的值
double doubleValue(); 返回 double 类型的值
float floatValue(); 返回 float 类型的值
int intValue(); 返回 int 类型的值
long longValue(); 返回 long 类型的值
short shortValue(); 返回 short 类型的值

Number的6个方法都是对数据类型进行转换的。Number实现了java.io.Serializable可以用来保存信息

public final class Integer extends Number implements Comparable

介绍

实现Comparable接口可以用Arrays的排序对这个对象进行排序
Integer类是基本数据类型int的包装器类,是抽象类Number的子类,位于java.lang包中。

数据

Integer类在对象中包装了一个基本类型int的值,也就是每个Integer对象包含一个int类型的字段。在Integer源码中如下定义:private final int value;
[static int] MAX_VALUE:值为 \(2^{31}-1\) 的常量,它表示 int 类型能够表示的最大值。
[static int] MIN_VALUE:值为 \(-2^{31}\)的常量,它表示 int 类型能够表示的最小值。
[static int] SIZE: 用来以二进制补码形式表示 int 值的比特位数。
[static Class] TYPE:表示基本类型 int 的 Class 实例。
[static int] BYTES:返回int值所占的字节数。

构造方法

  Integer类提供了两种构造方法:它们都会返回一个Integer对象

  (1)Integer(int value);

  (2)Integer(String s); //要注意的是字符串不能包含非数字字符,否则会抛出NumberFormatException

  (3)除此之外,还可以给Integer对象直接赋值,如:Integer a = 10;

public Integer(String s) throws NumberFormatException {
        this.value = parseInt(s, 10);
    }

从源码可以看出只能传递10进制字符串。

重要方法

方法 作用
[static int] bitCount(int i) 返回指定 int 值的二进制补码表示形式的 1 位的数量
[static int] compare(int x,int y) 比较x和y的值,当x大于y时返回1,当x等于y时返回0,否则返回-1
[int] compareTo(Integer anotherInteger) 在数值上比较两个Integer对象
[boolean] equals(Object obj) 比较此对象与指定对象
[int] hashcode() 返回此对象的哈希码
[static int] parseInt(String str) 将字符串参数作为有符号十进制数进行解析
[static String] toBinaryString(int i) 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式
[static String] toString() 返回该Integer值得String对象
[static Integer] valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例

toString方法

这个方法是静态的,而且由很多种,
int变字符串:
public static String toString(int i, int radix) :将i转换为radix进制字符串
public static String toUnsignedString(int i, int radix) :将i转换为radix进制无符号字符串
public static String toHexString(int i) 将i转换为16进制字符串
public static String toBinaryString(int i)将i转换为2进制字符串
public static String toOctalString(int i)将i转换为4进制字符串
public static String toString(int i)将i转换字符串
public static String toUnsignedString(int i)将i转换无符号字符串
字符串变int:
public static int parseInt(String s, int radix)
public static int parseInt(String s)
public static int parseUnsignedInt(String s, int radix)
public static int parseUnsignedInt(String s)
int或String变Integer等。还有其他很多小工具。

自动装箱,拆箱

//int和Integer对象用构造方法、直接赋值方法赋值比较
int a = 200;
Integer b = new Integer(200);
Integer c = 200;

//b和c都是Integer对象,所以用“==”比较时,就是比较内存地址值是否相等
System.out.println(b == c);  //false
System.out.println(b.equals(c));  //true

//a在进行比较时,会自动装箱
System.out.println(b.equals(a));  //true

//因为b是Integer对象,a是基本数据类型int的变量,当进行“==”比较时,b会自动拆箱成int,从而比较的就是变量的值是否相等

System.out.println(b == a);   //true

Integer i02 = 59;
Integer i03 = Integer.valueOf(59);
Integer i04 = new Integer(59);

System.out.println(i02 == i03);  //true
System.out.println(i02 == i04);  //false
System.out.println(i03 == i04);  //false

Integer i02 = 200;
Integer i03 = Integer.valueOf(200);
Integer i04 = new Integer(200);

System.out.println(i02 == i03);  //false
System.out.println(i02 == i04);  //false
System.out.println(i03 == i04);  //false

我们可以看到上面两段代码只是赋给对象的值不同,但是在判断”i02 == i03“时得到的结果却不同,这是为何:当使用直接赋值如”Integer i01 = 59“的时候,会调用Integer的valueOf()方法,这个方法就是返回一个Integer对象,但是在返回前,作了一个判断,判断要赋给对象的值i是否在[-128,127]区间中,且IntegerCache(是Integer类的内部类,里面有一个Integer对象数组,用于存放已经存在的且范围在[-128,127]中的对象)中是否存在此对象,如果存在,则直接返回引用,否则,创建一个新对象返回。那么我们就可以知道,200这个数字不在[-128,127]中,所以会直接创建一个新对象返回,i02和i03就是两个不同的对象。而59属于[-128,127]中,当创建i03时,会直接返回引用,此时i02和i03都指向同一个地址。

以第一段代码为例:”Integer i02 = 59":因为程序初次运行,没有59,所以直接创建一个对象返回;“Integer i03 = Integer.valueOf(59)”:因为IntegerCache中已经存在59,所以直接返回引用;“Integer i04 = new Integer(59)”:直接创建一个新对象。

JVM中一个字节一下的整型数据(即[128,127])会在JVM启动时加载进内存,除非用new Integer()显示的创建对象,否则都是同一对象。

//Integer类中的valueOf()源代码

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

构造方法

Double(double value):构造一个新分配的 Double 对象,它表示转换为 double 类型的参数。
Double(String s):构造一个新分配的 Double 对象,它表示 String 参数所指示的 double 值。
Double a = 123;

常用方法

方法 返回值 功能
byteValue() byte 以 byte 类型返回该 Double 的值
doubleValue() double 以 double 类型返回该 Double 的值
fioatValue() float 以 float 类型返回该 Double 的值
intValue() int 以 int 类型返回该 Double 的值(强制转换为 int 类型)
longValue() long 以 long 类型返回该 Double 的值(强制转换为 long 类型)
shortValue() short 以 short 类型返回该 Double 的值(强制转换为 short 类型)
isNaN() boolean 如果此 Double 值是一个非数字值,则返回 true,否则返回 false
isNaN(double v) boolean 如果指定的参数是一个非数字值,则返回 true,否则返回 false
toString() String 返回一个表示该 Double 值的 String 对象
valueOf(String s) Double 返回保存指定的 String 值的 Double 对象
parseDouble(String s) double 将数字字符串转换为 Double 数值

Double常量

MAX_VALUE:值为 1.8E308 的常量,它表示 double 类型的最大正有限值的常量。
MIN_VALUE:值为 4.9E-324 的常量,它表示 double 类型数据能够保持的最小正非零值的常量。
NaN:保存 double 类型的非数字值的常量。
NEGATIVE_INFINITY:保持 double 类型的负无穷大的常量。
POSITIVE_INFINITY:保持 double 类型的正无穷大的常量。
SIZE:用秦以二进制补码形式表示 double 值的比特位数。
TYPE:表示基本类型 double 的 Class 实例。

java--数据类型包装类

原文:https://www.cnblogs.com/cqyinsist/p/14816558.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!