一般情况下我们会使用数据的基本数据类型:byte、int、short、long、double、float、boolean、char;
对应的包装类型也有八种:Byte、Integer、Short、Long、Double、Float、Character、Boolean;
包装类型都是用final声明了,不可以被继承重写;
在实际情况中编译器会自动的将基本数据类型装箱成对象类型,或者将对象类型拆箱成基本数据类型;
Number 是一个抽象类,也是一个超类(即父类)。Number 类属于 java.lang 包,所有的包装类(如 Double、Float、Byte、Short、Integer 以及 Long)都是抽象类 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可以用来保存信息
实现Comparable
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
[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 实例 |
这个方法是静态的,而且由很多种,
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 数值 |
MAX_VALUE:值为 1.8E308 的常量,它表示 double 类型的最大正有限值的常量。
MIN_VALUE:值为 4.9E-324 的常量,它表示 double 类型数据能够保持的最小正非零值的常量。
NaN:保存 double 类型的非数字值的常量。
NEGATIVE_INFINITY:保持 double 类型的负无穷大的常量。
POSITIVE_INFINITY:保持 double 类型的正无穷大的常量。
SIZE:用秦以二进制补码形式表示 double 值的比特位数。
TYPE:表示基本类型 double 的 Class 实例。
原文:https://www.cnblogs.com/cqyinsist/p/14816558.html