2011/10/23
关于Integer的自动装箱
public class IntegerTest {
public static void main(String[] args)
{
int a = 1000, b = 1000;
System.out.println(a == b);
Integer c = 128, d = 128;
System.out.println(c == d);
Integer e = 127, f = 127;
System.out.println(e == f);
Integer g = new Integer(127),h = new Integer(127);
System.out.println(e == f);
}
}
输出为:
true
false
true
false
第一个自然是相等的了。
第二个跟第三个的不同是因为:
在Integer的自动装箱过程中,如果数值是在-128~127之间的值的话,那么会提供重用,所以e和f指向的是同一个对象。而第二个中已经大于了127,自然不能重用,那个c和d指向的就是不同一个对象了。
第三个和第四个不同事因为:
g和h指向的对象是自己new出来的,不是交给java自动封装的,所以他们指向的就是自己分别的对象,返回false.
2012/3/19
关于java的参数传递
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
char[] before = new char[4];
new Test().change(before);
System.out.print(before.length);
}
public void change(char[] a)
{
a=new char[5];
}
}
问输出什么。
答案:4.
因为java中的值传递,change函数的形参a只是第一个数组的另一个引用而已,他虽然指向了另一个数组,但是before还是指向着之前的数组.