Before Swap, a is 10
Before Swap, b is 50
After Swap a is 10
After Swap b is 50
base type:
Before Swap i is 5
Before Swap j is 9
After Swap i is 5
After Swap j is 9
after change: welcome to java world!!!
//以上上面程序的运行结果,为什么传Integer对象的时候,没有变化呢?!
Before Swap, b is 50
After Swap a is 10
After Swap b is 50
base type:
Before Swap i is 5
Before Swap j is 9
After Swap i is 5
After Swap j is 9
after change: welcome to java world!!!
//以上上面程序的运行结果,为什么传Integer对象的时候,没有变化呢?!
Integer temp = ia;
ia = ib;
ib = temp;
}
----------------------
swap(a, b); 调用这一句时,首先执行把ia=a,ib=b,只是说明ia,ib分别指向a,b指向的对象,然后在方法体中又使ia指向b,ib指向了a,但是a,b指向的对象仍是原来的,没有改变.仔细想一下.
2。包装类属于声明类类型传地址。用类类型的实例 .toString()方法,打印出哈希玛,@指向基类地址。
谢谢楼上的各位,好像明白了点不过有新的问题
public class Test{
public static void print(String a){}
public static void main(String args[]){
String a = new String("welcome");
print(a); //这个传进去的是String 对象的引用
print(new String(" to java world!!")); //那么这个传进去的是什么呢?!
}}
new String(" to java world!!")不就是构造一个String对象吗?
当然也是对象的引用了 ^_^
如果你感到地址(指针)与引用好像差不多,其实引用指向的不是地址,而是某一个数据结构;如果你知道地址(指针)与引用的区别,可以“简单的”把引用看成一个地址。
public static void main(String args[]) {
Integer a=new Integer(10);
Integer b= new Integer(50);
int i=5,j=9;
System.out.println("Before Swap, a is " + a);
System.out.println("Before Swap, b is " + b);
Integer temp = a;
a = b;
b = temp;
System.out.println("After Swap a is " + a);
System.out.println("After Swap b is " + b); System.out.println(" " );
swap(a,b);//假的!
System.out.println(" " ); System.out.println("After Swap a is " + a);
System.out.println("After Swap b is " + b);
}
public static void swap(Integer ia, Integer ib){
System.out.println("Before Swap, a is " + ia);
System.out.println("Before Swap, b is " + ib);
Integer temp = ia;
ia = ib;
ib = temp;
System.out.println("After Swap a is " + ia);
System.out.println("After Swap b is " + ib);
}
} 只能就地正法。
"像简单的数据类型是按值,而像对象呢,那就是按引用,其实本质上是按指针传递!"
问题不在于区别Java的引用和指针,而在于区别C++的引用和指针。如果按Java的说法,引用=指针,则可以说对象按引用传递,但引用仍然是一个值,在传递引用这个值。引用这个值,就是new表达式的值。所以,统一的说,是值传递。在值传递中,引用这个值比较特殊。一般而言,传值和传地址的问题,关键在于指针不是值,而是一个变量!变量与变量值的区别应该知道吧。而Java中的引用(说指针也可以),它不是变量。所以Java中一般不讨论传地址的问题(它没有指针变量)。
你的说法也是对的,前提是你的听众不知道C++的指针。否则,他容易混淆。