欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

(Java)java中的自动装箱与自动拆箱,

来源: javaer 分享于  点击 24147 次 点评:142

(Java)java中的自动装箱与自动拆箱,



public class Test {
	/**
	 * 
	 * 关于Java的自动装箱与自动拆箱
	 * 基本类型存储在栈中
	 * 对象存储在堆当中
	 * 而对于数字这种经常使用的存储在栈中 使用效率比较高
	 * 为了方别与其他的语言进行交互,一切基于对象的方法所以又提出了包装类型。
	 * == 比较的是两个对象的地址
	 * equals是可以自己重写用来判断内容是否相同,但是不会处理数据类型,所以g2返回的是false
	 * 
	 * 自动拆箱发生在:当包装类型和具体数字进行比较的时候 例如 Integer a = new Integer(2);a == 2这个时候便可以自动拆箱。
	 * 但是当 Integer a = new Integer(321); Integer b = new Integer(321); a == b 这个时候不拆箱,返回false;
	 * 特殊情况,当出现算术运算的情况下,便会自动拆箱。例子参看注释 g3
	 * 
	 * 存储位置的问题:
	 * 基本类型存储在:栈中,而对于包装类型的所有的数字类型的来说,-128-127存储在常量池中,所以在注释a中返回值为true,而在b返回的是false、
	 * 
	 * 这里说一下常量池:常量池存储的内容为:在编译的时候已经确定的值,包括基本类型,对象数据,以及常量值 final中的常量。以及类或者接口的全限定名称
	 * 字段的描述符和名称
	 * 方法的描述符合名称。
	 * 
	 * @param args
	 */
	public static void main(String[] args){
		Integer a = 1;
		Integer b = 2;
		Integer c = 3;
		Integer d = 3;
		Integer e = 321;
		Integer f = 321;
		Integer g1 = 320;
		Long g = 3L;
		System.out.println(c == d);//a
		System.out.println(e == f);//b
		System.out.println(c == (a+b));
		System.out.println(c.equals(a+b));
		System.out.println(g == a+b);//g1
		System.out.println(g.equals(a+b));//g2
		System.out.println(e == (g1+a));//g3 true
		   Object obj = new Integer(1024); 
	        if(Integer.valueOf(obj.toString())==1024){ 
	            System.out.println("Integer.valueOf(obj.toString())==1024 is true"); 
	        } 

	}
}

输出的结果为

相关文章

    暂无相关文章
相关栏目:

用户点评