一、8种基本数据类型对应的包装类型名
基本数据类型 | 包装类型 |
---|---|
byte | java.lang.Byte(父类Number) |
short | java.lang.Short(父类Number) |
int | java.lang.Integer(父类Number) |
long | java.lang.Long(父类Number) |
float | java.lang.Float(父类Number) |
double | java.lang.Double(父类Number) |
boolean | java.lang.Boolean(父类Object) |
char | java.lang.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}
}
四、构造方法(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 -->DoubleDouble d = new Double(1.23);System.out.println(d);// String --> DoubleDouble e = new Double("3.14");System.out.println(e);}
}
五、包装类常量
常量属性 |
---|
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);}
}
六、自动装箱/自动拆箱(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);}
}
注意:自动装箱底层实际上还是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);//1001Integer a = 1000; // Integer a = new Integer(1000); a是个引用,保存内存地址指向对象。Integer b = 1000; // Integer b = new Integer(1000); b是个引用,保存内存地址指向对象。System.out.println(a == b); //false}
}
注意:
- == 这个运算符不会触发自动拆箱机制
- == 永远判断的都是两个对象的内存地址是否相同。
- 只有
+ - * /
等运算的时候才会触发自动拆箱机制
七、(方法区)整数型常量池
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}
}
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);//自动拆箱 123Integer a = 100;Integer b = 100;int res1 = Integer.compare(a, b);System.out.println(res1);//0res1 = Integer.compare(-a, b);System.out.println(res1);//-1res1 = Integer.compare(a, -b);System.out.println(res1);//1System.out.println(a.equals(b));//trueint i = Integer.parseInt("123");System.out.println(i);//123System.out.println(Integer.signum(-123));//-1System.out.println(Integer.signum(123));//1System.out.println(Integer.signum(0));//0System.out.println(Integer.toBinaryString(10));//1010System.out.println(Integer.toOctalString(10));//12System.out.println(Integer.toHexString(10));//aString s = Integer.toString(123);System.out.println(s);//123Integer int1 = Integer.valueOf("123");System.out.println(int1);//123}
}
九、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);//aCharacter a = 'a';Character b = 'b';System.out.println(a.compareTo(b));//-1System.out.println(a.equals(b));//falseSystem.out.println(Character.isDigit('1'));//trueSystem.out.println(Character.isLetter('a'));//trueSystem.out.println(Character.isLetterOrDigit('1'));//trueSystem.out.println(Character.isLetterOrDigit('a'));//trueSystem.out.println(Character.isLowerCase('a'));//trueSystem.out.println(Character.isUpperCase('A'));//trueSystem.out.println(Character.isSpaceChar(' '));//trueSystem.out.println(c.toString());//"a"System.out.println(Character.valueOf('c'));//c}
}