(Java)java中的自动装箱与自动拆箱,
分享于 点击 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");
}
}
}
输出的结果为
相关文章
- 暂无相关文章
用户点评