- 关于包装类
1、java中为8种基本数据类型又对应准备了8种包装类型(SUN公司已写好)。8种包装类属于引用数据类型,父类是Object。
2、为什么要提供包装类型?分析这种需求(代码示例):
public class DemoTest{
public static void main(String[] args) {
/*调用doSome()方法的时候需要传一个数字进去。
* 但是数字属于基本数据类型,
* 而dosome()方法参数的类型是object。
* 可见dosome()方法无法接收基本数据类型的数字,
* 所以要传一个数字对应的包装类进去。
* 把200这个数字经过构造方法包装成对象。*/
Demo demo = new Demo(10);
/*doSome()方法虽然不能直接传10,
但是可以传一个10对应的包装类型。*/
dosome(demo);
}
private static void dosome(Object obj) {
System.out.println(obj);
//输出:10
}
}
public class Demo{
int value;
public Demo() {
}
public Demo(int value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
- 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) |
其中Number是一个抽象类,无法实例化对象。
- 装箱和拆箱
1、代码示例:
public class Demo{
public static void main(String[] args) {
/*进行构造方法的包装达到了:
基本数据类型向引用数据类型的转换。*/
//这就是装箱。
Integer i = new Integer(111);
/*将引用数据类型转换为基本数据类型*/
//这就是拆箱。
float f = i.floatValue();
/*floatValue()就是以float的形式返回指定的数值,
* 其它形式以此类推*/
System.out.println(f);//输出:111.0
/*关于Integer类的构造方法,有两个:
Integer(int)、Integer(String)。
关于其它类的构造方法看源码*/
Integer i2 = new Integer("222");
System.out.println(i2);//输出:222
}
}
2、通过访问包装类的常量,来获取最大值和最小值。
代码示例:
public class Demo{
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
- jdk1.5之后支持自动装箱和自动拆箱
public class Demo{
public static void main(String[] args) {
//自动装箱
Integer i = 11;
//自动拆箱
int x = i;
System.out.println(x);//输出:11
Integer n = 10;//n还是一个引用
System.out.println(n + 1);
//输出:11(n是包装类,这里的n自动拆箱了)
Integer q = 127;
Integer w = 127;
System.out.println(q == w);//输出:true
Integer e = 128;
Integer r = 128;
System.out.println(e == r);//输出:false
/*java中为了提高程序的执行效率,
将[-128到127]之间所有的包装对象提前创建好,
放到了一个方法区的“整数型常量池”当中。
目的是只要用这个区间的数据不需要再new了,
直接从整数型常量池当中取出来。
原理:q变量中保存的对象的内存地址和
w变量中保存的对象的内存地址是一样的。
"=="永远判断的是两个对象的内存地址是否相同。*/
}
}
图例:
- NumberFormatException异常
代码示例:
public class Demo{
public static void main(String[] args) {
/*重点方法:static int parseInt(String s)
静态方法,传参String,返回int.
例子:网页上文本框中输入的100实际上是"100"字符串。
后台数据库中要求存储100数字,此时java程序需要將"100"转换成100数字。*/
int retValue = Integer.parseInt("123");
/*以下代码会出现异常:NumberFormatException。
int retValue1 = Integer.parseInt("中文");*/
System.out.println(retValue);
}
}
- 进制转换
代码示例:
public class Demo{
public static void main(String[] args) {
/*static String toBinarystring(int i)
静态的:将十进制转换成二进制字符串。*/
String s = Integer.toBinaryString(3);
System.out.println(s);//11
/*static String toOctalString(int i)
静态的:将十进制转换成八进制字符串。*/
String s1 = Integer.toOctalString(16);
System.out.println(s1);//10
/*static string toHexString(int i)
静态的:将十进制转换成十六进制字符串。*/
String s2 = Integer.toHexString(26);
System.out.println(s2);//1a
}
}
- Integer.valueOf方法
代码示例:
public class Demo{
public static void main(String[] args) {
Integer integer = Integer.valueOf(3);
System.out.println(integer);
}
}
- 总结图例