java学习初探十之包装类
来源:互联网 发布:java一年经验工资 编辑:程序博客网 时间:2024/06/06 11:42
1java中八种基本数据类型对应的包装类
基本数据类型 包装类型
byte - java.lang.Byte
short - java.lang.Short
int - java.lang.Integer
long - java.lang.Long
float - java.lang.Float
double - java.lang.Double
boolean - java.lang.Boolean
char - java.lang.Character
思考:java中提供的八种基本数据类型不够用吗?为什么java中还要提供对应的包装类呢?
方便。
举例说明:
package javalang;public class IntegerTest01 { public static void main(String[] args) { //基本数据类型 byte b=10; //引用类型 Byte b1=new Byte(b); m1(b1); } //需求:规定m1方法可以接收java中任何一种数据类型 //m1方法如果想接收byte类型的数据,可以将byte类型先包装成java.lang.Byte再传递参数 public static void m1(Object o) { System.out.println(o); }}
2.包装类继承关系
3.Integer
(1)以Interger类型为例,学习八种类型
package javalang;public class IntegerTest02 { public static void main(String[] args) { //获取int类型的最大值最小值 System.out.println("int最小值:"+Integer.MIN_VALUE); System.out.println("int最大值:"+Integer.MAX_VALUE); //以int推byte System.out.println("int最小值:"+Byte.MIN_VALUE); System.out.println("int最大值:"+Byte.MAX_VALUE); //创建Integer类型的对象 Integer i1=new Integer(10); Integer i2=new Integer("123");//String转Integer System.out.println(i1);//10 System.out.println(i2);//124 //以下程序编译可以通过,运行会报异常,java.lang.NumberFormatException: //Integer i3=new Integer("abc"); //System.out.println(i3);//数字格式化异常,java.lang.NumberFormatException: //基本数据类型--》引用类型 Integer i4=new Integer(10); Integer i6=Integer.valueOf(10); Integer i7=Integer.valueOf("34"); //引用类型--》基本数据类型 int i5=i4.intValue(); System.out.println(i4+1);//11 System.out.println(i5+1);//11 //重要:static int parseInt(String s) String-->int int age=Integer.parseInt("25"); System.out.println(age+1);//26 //重要 static double parseDouble(String s) String-->Double double price=Double.parseDouble("2.4"); System.out.println(price+1);//3.4 //将int的十进制转2进制 String s1=Integer.toBinaryString(10); System.out.println(s1);//1010 //将int的十进制转16进制 String s2=Integer.toHexString(10); System.out.println(s2);//a //将int的十进制转8进制 String s3=Integer.toOctalString(10); System.out.println(s3);//12 }}
(2)Integer int String 三种类型转换
package javalang;public class IntegerTest04 { public static void main(String[] args) { //1.int-->Integer Integer i1=Integer.valueOf(10); //2.Integer-->int int i2=i1.intValue(); //3.String-->Intege r Integer i3=Integer.valueOf("23"); //4.Integer-->String String s1=i3.toString(); //5.String-->int int i4=Integer.parseInt("123"); //6.int-->String String s2=i4+""; }}
4.自动装箱,自动拆箱
jdk5.0新特性。
以下特性适合jdk1.5及其以后的,jdk1.4及其以下所有版本不能使用以下特性。
(1)自动装箱(auto_boxing),自动拆箱(auto_unboxing)是程序编译期的概念,和程序运行无关
(2)之所以引入是为了方便程序员编码
package javalang;public class IntegerTest05 { public static void main(String[] args) { //jdk5.0之前 //int-->Integer(装箱) Integer i1=new Integer(10); //Integer -->int (拆箱) int i2=i1.intValue(); //jdk5.0之后,包括5.0 Integer i3=10;//自动装箱 int i4=i3;//自动封箱 System.out.println(i3);//10 System.out.println(i4+1);//11 }}
深入自动装箱,自动拆箱,
以下例子,面试时经常会被问到
package javalang;public class IntegerTest06 { public static void main(String[] args) { Integer i1=new Integer(10); Integer i2=new Integer(10); //这里不会有自动拆箱 System.out.println(i1==i2);//false //比较两个Integer类型的数据是否相等,不能用== //Integer重写了Object中的equals方法。 System.out.println(i1.equals(i2));//true //重点 Integer i3=128; Integer i4=128; //上面的等同于 //Integer i3=new Integer(128); //Integer i4=new Integer(128); System.out.println(i3==i4);//false //注意以下程序: //如果数据在(-128到127)范围内,java中引入了一个“整形常量池”,在方法中。 Integer i5=127; Integer i6=127; System.out.println(i5==i6);//true Integer i7=-128; Integer i8=-128; System.out.println(i7==i8);//true Integer i9=-129; Integer i10=-129; System.out.println(i9==i10);//false }}
原因也可以从java.lang.Integer源码中看出
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} }
阅读全文
0 0
- java学习初探十之包装类
- java学习之包装类
- Java学习(十)基本数据类型的包装类
- java学习之路---包装类
- Java学习笔记之包装类
- java学习之基本包装类
- Java学习笔记之包装类
- Java学习之基本数据类型包装类
- Java包装类学习
- java 包装类学习
- JavaSE入门学习30:Java常用类之包装类
- java学习初探6之Object类
- java学习之匿名内部类与包装类
- java学习之基本数据类型对象包装类
- java学习第十六天之基本数据类型包装类、StringBuffer
- 个人学习-java-包装类
- java知识之包装类
- java基础之包装类
- jQuery中停止动画stop
- 如何在 Python3 中操作数据
- Java多线程--Monitor对象(二)
- Spring总结
- QThread Class
- java学习初探十之包装类
- 注解与代理类
- oracle用户,权限,角色
- Intellij idea破解办法
- centos6.5上搭建maven私服
- Struts总结
- python数据结构(列表、元组、字典)
- 1类的继承
- 0.2 用代码画画——目标读者、教材特色、内容大纲