一、8种基本数据类型对应的包装类型名
基本数据类型 | 包装类型 |
---|---|
byte | .Byte(父类Number) |
short | .Short(父类Number) |
int | .Integer(父类Number) |
long | .Long(父类Number) |
float | .Float(父类Number) |
double | .Double(父类Number) |
boolean | .Boolean(父类Object) |
char | .Character(父类Object) |
注意: 8种包装类属于 引用数据类型
二、父类Number方法
方法名 | 作用 |
---|---|
byte byteValue() | 以 byte 形式返回指定的数值 |
abstract double doubleValue() | 以 double 形式返回指定的数值 |
abstract float floatValue() | 以 float 形式返回指定的数值 |
abstract int intValue() | 以 int形式返回指定的数值 |
abstract long longValue() | 以 long形式返回指定的数值 |
short shortValue() | 以 short形式返回指定的数值 |
注意: 这些方法所有的数字包装类的子类都有,这些方法是负责 拆箱
的。
三、手动装箱/手动拆箱
public class IntegerTest02 {
public static void main(String[] args) {
// 123这个基本数据类型,进行构造方法的包装达到了:基本数据类型向引用数据类型的转换。
// 基本数据类型 -(转换为)->引用数据类型(装箱)
Integer i = new Integer(123);
// 将引用数据类型--(转换为)-> 基本数据类型
float f = i.floatValue();
System.out.println(f); //123.0
// 将引用数据类型--(转换为)-> 基本数据类型(拆箱)
int retValue = i.intValue();
System.out.println(retValue); //123
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
四、构造方法(Java9后过时)
Integer构造方法名 |
---|
Integer(int value) |
Integer(String s) |
注意:
- Byte、Short、Long、Float、Double、Boolean的构造方法和Integer的构造方法一样。
- Character只有一个构造方法
Character构造方法名 |
---|
Character(char value) |
注意: Float比Integer多一个
Float构造方法名 |
---|
Float(double value) |
eg.
public class IntegerTest03 {
public static void main(String[] args) {
// Java9之后不建议使用这个构造方法了。出现横线表示已过时。
// 将数字100转换成Integer包装类型(int --> Integer)
Integer x = new Integer(100);
System.out.println(x);
// 将String类型的数字,转换成Integer包装类型。(String --> Integer)
Integer y = new Integer("123");
System.out.println(y);
// double -->Double
Double d = new Double(1.23);
System.out.println(d);
// String --> Double
Double e = new Double("3.14");
System.out.println(e);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
五、包装类常量
常量属性 |
---|
MAX_VALUE |
MIN_VALUE |
注意: Byte、Short、Integer、Long、Float、Double都有。
eg.
public class IntegerTest04 {
public static void main(String[] args) {
// 通过访问包装类的常量,来获取最大值和最小值
System.out.println("int的最大值:" + Integer.MAX_VALUE);
System.out.println("int的最小值:" + Integer.MIN_VALUE);
System.out.println("byte的最大值:" + Byte.MAX_VALUE);
System.out.println("byte的最小值:" + Byte.MIN_VALUE);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
六、自动装箱/自动拆箱(java5新特性)
1.什么是自动装箱和自动拆箱?
- 自动装箱:基本数据类型自动转换成包装类。
- 自动拆箱:包装类自动转换成基本数据类型
2.自动装箱和自动拆箱的好处?
- 方便编程
- 有了自动拆箱之后,Number类中的方法就用不着了
eg.
public class IntegerTest05 {
public static void main(String[] args) {
// 900是基本数据类型
// x是包装类型
// 基本数据类型 --(自动转换)--> 包装类型:自动装箱
Integer x = 900; // 等同于:Integer z = new Integer(900);
System.out.println(x);
// x是包装类型
// y是基本数据类型
// 包装类型 --(自动转换)--> 基本数据类型:自动拆箱
int y = x;
System.out.println(y);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
注意:自动装箱底层实际上还是new对象了。
public class IntegerTest05 {
public static void main(String[] args) {
// z是一个引用,z是一个变量,z还是保存了一个对象的内存地址。
Integer z = 1000; // 等同于:Integer z = new Integer(1000);
// 分析为什么这个没有报错呢?
// +两边要求是基本数据类型的数字,z是包装类,不属于基本数据类型,这里会进行自动拆箱。将z转换成基本数据类型
// 在java5之前你这样写肯定编译器报错。
System.out.println(z + 1);//1001
Integer a = 1000; // Integer a = new Integer(1000); a是个引用,保存内存地址指向对象。
Integer b = 1000; // Integer b = new Integer(1000); b是个引用,保存内存地址指向对象。
System.out.println(a == b); //false
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
注意:
- == 这个运算符不会触发自动拆箱机制
- == 永远判断的都是两个对象的内存地址是否相同。
- 只有
+ - * /
等运算的时候才会触发自动拆箱机制
七、(方法区)整数型常量池
public class IntegerTest06 {
public static void main(String[] args) {
Integer a = 128;
Integer b = 128;
System.out.println(a == b); //false
//原理:x变量中保存的对象的内存地址和y变量中保存的对象的内存地址是一样的。
Integer x = 127;
Integer y = 127;
// == 永远判断的都是两个对象的内存地址是否相同。
System.out.println(x == y); //true
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
java中为了提高程序的执行效率,将 [-128 ~ 127]
之间所有的包装对象提前创建好, 放到了一个方法区的“整数型常量池
”当中了。
目的是:只要用这个区间的数据不需要再new了,直接从整数型常量池当中取出来。
八、Integer方法
方法名 | 作用 |
---|---|
static Integer decode(String nm) | 将String转成Integer |
static int compare(int x, int y) | 比较两个数是否相等;相等返回0;前大后小返回1;后大前小返回-1 |
static int signum(int i) | 符号函数;负数返回-1;正数返回1;0返回0 |
static String toBinaryString(int i) | 将i转成二进制 |
static String toHexString(int i) | 将i转成十六进制 |
static String toOctalString(int i ) | 将i转成八进制 |
常用方法 | |
static int parseInt(String s) | 字符串转int |
static Integer valueOf(String s) | 字符串转Integer |
String toString() | Integer转String |
boolean equals(Object obj) | 判断两个Integer是否相等 |
注意: Byte、Short、Long、Float、Double、Boolean照葫芦画瓢,方法差不多相同。
eg.
class IntegerTest{
public static void main(String[] args) {
Integer d = Integer.decode("123");
System.out.println(d);//自动拆箱 123
Integer a = 100;
Integer b = 100;
int res1 = Integer.compare(a, b);
System.out.println(res1);//0
res1 = Integer.compare(-a, b);
System.out.println(res1);//-1
res1 = Integer.compare(a, -b);
System.out.println(res1);//1
System.out.println(a.equals(b));//true
int i = Integer.parseInt("123");
System.out.println(i);//123
System.out.println(Integer.signum(-123));//-1
System.out.println(Integer.signum(123));//1
System.out.println(Integer.signum(0));//0
System.out.println(Integer.toBinaryString(10));//1010
System.out.println(Integer.toOctalString(10));//12
System.out.println(Integer.toHexString(10));//a
String s = Integer.toString(123);
System.out.println(s);//123
Integer int1 = Integer.valueOf("123");
System.out.println(int1);//123
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
九、Character方法
方法名 | 作用 |
---|---|
char charValue() | 将Character转成char |
int compareTo(Character anotherCharacter) | 判断两个Character是否相等;相等返回0;前大后小返回1;后大前小返回-1 |
常用方法 | |
boolean equals(Object obj) | 判断两个Character是否相等 |
String toString() | 将Character转成String |
static boolean isDigit(char ch) | 判断ch是不是数字 |
static boolean isLetter(char ch) | 判断ch是不是字母 |
static boolean isLetterOrDigit(char ch) | 判断ch是不是字母或数字 |
static boolean isLowerCase(char ch) | 判断ch是不是小写字母 |
static boolean isUpperCase(char ch) | 判断ch是不是大写字母 |
static boolean isSpaceChar(char ch) | 判断ch是不是空格 |
static Character valueOf(char c) | 将char转成Character |
eg.
class CharacterTest{
public static void main(String[] args) {
Character c = 'a';
char res1 = c.charValue();
System.out.println(res1);//a
Character a = 'a';
Character b = 'b';
System.out.println(a.compareTo(b));//-1
System.out.println(a.equals(b));//false
System.out.println(Character.isDigit('1'));//true
System.out.println(Character.isLetter('a'));//true
System.out.println(Character.isLetterOrDigit('1'));//true
System.out.println(Character.isLetterOrDigit('a'));//true
System.out.println(Character.isLowerCase('a'));//true
System.out.println(Character.isUpperCase('A'));//true
System.out.println(Character.isSpaceChar(' '));//true
System.out.println(c.toString());//"a"
System.out.println(Character.valueOf('c'));//c
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32