jdk1.5的特性
2015-12-02 22:00
369 查看
自动装箱拆箱
JDk1.5的新特性,自动装箱拆箱:
1) 自动装箱:
基本数据类型,直接变成对象,自动完成。
2) 自动拆箱:
对象变成基本数据类型,自动完成。
引入案例:
public
class ZhuangXiang {
public
static void main(String[] args) {
//Integer是一个引用类型,而100是个基本类型,100却可以赋值给Integer,这就是自动装箱
//相当于Integer i=new Integer(100);
Integer i=100;
//用String和Integer对比
String s="100";
//输出的是100对象而不是基本类型的数子
System.out.println(i);//100
//可以直接相加减,然后再以对象输出,
//相当于intm=i.valueOf()+1;Integer in=new Integer(m);然后输出对象
System.out.println(i+1);//101
//用String和Integer对比,数据类型不一致,S+1输出结果1001
System.out.println(s+1);//1001
}
}
通过上例可以看出Integer和String等其他的引用类型数据不同,它有自己的特性,可以自动实现对象和基本数据类型的转换,但是这里输入的必须是数字类型的字符串,不能输入汉字或者英文。但以上转换仅仅局限于1.5版本以上,换成1.4就报错了。
面试题:(稍微做了下修改):重点看注释,是否和你想的一样呢
/*
* 自动装箱和拆箱面试题(做了一些小变动)
*/
public
class ZiDongChaiXiang {
public
static void main(String[] args) {
String a = "200";
String b = "200";
//引用类型中,==
比较的是对象地址,以上两个都在方法区的常量区使用了同一个常量,所有地址一样
System.out.println("a==b "+(a==b));//true
//Integer类继承Object,重写方法equals,没有比较地址,比较的是对象中具体数值
System.out.println("a.equals(b)"+a.equals(b));//true
Integer aa = new Integer(100);
Integer bb = new Integer(100);
System.out.println("aa==bb"+(aa==bb));//ture看到new,一般不用在考虑,
//因为new就是在堆内存中为不同的对象开辟了不同空间
System.out.println("aa.equals(bb)"+ aa.equals(bb));//true
Integer aaa = 300;
Integer bbb = 300;
System.out.println("aaa==bbb"+(aaa==bbb));//false
System.out.println("aaa.equals(bbb)"+ aaa.equals(bbb));//true
/*
* 自动装箱中,取值范围在byte之内
-128 127
*JVM不会从新开启内存空间
*Integer i = 127; i = new Integer(127)
*Integer j = i;
*/
Integer i = 127;
Integer j = 127;// j=i
System.out.println("i==j"+(i==j));//true
System.out.println("i.equals(j)"+i.equals(j));//true
}
}
这个自动装箱和拆箱以后会用的很频繁,所有这个功能建议数量掌握,另外一定要记得它的特殊情况,如果int类型的值范围在byte之间那么jvm是不会从新开辟内存空间的,这一点和String的用法比较类似。
这就是个人对装箱拆箱原理的一点拙见,欢迎大家来访,如有不足,敬请指正。
感谢来访,分享无价!
JDk1.5的新特性,自动装箱拆箱:
1) 自动装箱:
基本数据类型,直接变成对象,自动完成。
2) 自动拆箱:
对象变成基本数据类型,自动完成。
引入案例:
public
class ZhuangXiang {
public
static void main(String[] args) {
//Integer是一个引用类型,而100是个基本类型,100却可以赋值给Integer,这就是自动装箱
//相当于Integer i=new Integer(100);
Integer i=100;
//用String和Integer对比
String s="100";
//输出的是100对象而不是基本类型的数子
System.out.println(i);//100
//可以直接相加减,然后再以对象输出,
//相当于intm=i.valueOf()+1;Integer in=new Integer(m);然后输出对象
System.out.println(i+1);//101
//用String和Integer对比,数据类型不一致,S+1输出结果1001
System.out.println(s+1);//1001
}
}
通过上例可以看出Integer和String等其他的引用类型数据不同,它有自己的特性,可以自动实现对象和基本数据类型的转换,但是这里输入的必须是数字类型的字符串,不能输入汉字或者英文。但以上转换仅仅局限于1.5版本以上,换成1.4就报错了。
面试题:(稍微做了下修改):重点看注释,是否和你想的一样呢
/*
* 自动装箱和拆箱面试题(做了一些小变动)
*/
public
class ZiDongChaiXiang {
public
static void main(String[] args) {
String a = "200";
String b = "200";
//引用类型中,==
比较的是对象地址,以上两个都在方法区的常量区使用了同一个常量,所有地址一样
System.out.println("a==b "+(a==b));//true
//Integer类继承Object,重写方法equals,没有比较地址,比较的是对象中具体数值
System.out.println("a.equals(b)"+a.equals(b));//true
Integer aa = new Integer(100);
Integer bb = new Integer(100);
System.out.println("aa==bb"+(aa==bb));//ture看到new,一般不用在考虑,
//因为new就是在堆内存中为不同的对象开辟了不同空间
System.out.println("aa.equals(bb)"+ aa.equals(bb));//true
Integer aaa = 300;
Integer bbb = 300;
System.out.println("aaa==bbb"+(aaa==bbb));//false
System.out.println("aaa.equals(bbb)"+ aaa.equals(bbb));//true
/*
* 自动装箱中,取值范围在byte之内
-128 127
*JVM不会从新开启内存空间
*Integer i = 127; i = new Integer(127)
*Integer j = i;
*/
Integer i = 127;
Integer j = 127;// j=i
System.out.println("i==j"+(i==j));//true
System.out.println("i.equals(j)"+i.equals(j));//true
}
}
这个自动装箱和拆箱以后会用的很频繁,所有这个功能建议数量掌握,另外一定要记得它的特殊情况,如果int类型的值范围在byte之间那么jvm是不会从新开辟内存空间的,这一点和String的用法比较类似。
这就是个人对装箱拆箱原理的一点拙见,欢迎大家来访,如有不足,敬请指正。
感谢来访,分享无价!
相关文章推荐
- java 正则表达式浅析
- Spring、Spring MVC、Struts2、优缺点整理
- JAVA代码 IF else语句
- java项目资源加载的几种方法
- struts2简单数据验证
- java-Thread创建
- MessagePack Java的使用
- Java 用for循环和while循环画菱形
- java中API接口之个人心得
- Eclipse Project 无故消失的解决办法
- 思维导图 JAVA 语法基础
- private, public, protected 访问标号的访问范围之JAVA篇
- [置顶] spring 的面试题
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- struts2--关于值栈的概念性问题
- java(6)--事件监听机制
- Spring IOC容器基本原理
- 【Java小项目】打飞机
- JAVA之变量默认初始化值
- Java中有关Null的9件事