java 簡單數據類型(基本數據類型及其包裝類)的引用
public static void main(String[] args) {
int a1 =10,b1=20;
swap1(a1,b1);
System.out.println("a1:"+a1+";b1:"+b1);//a1:10;b1:20
Integer a2 =10,b2=20;
swap1(a2,b2);
System.out.println("a2:"+a2+";b2:"+b2);//a2:10;b2:20
}
public static void swap1(int a,int b){
int temp =a;
a=b;
b=temp;
}
public static void swap2(Integer a,Integer b){
Integer temp =a;
a=b;
b=temp;
}
結果爲:
a1:10;b1:20
a2:10;b2:20
java 複雜數據類型(由多個基本數據類型及其包裝類組成)的引用
class PointV{
int x;
int y;
}
public class ReferenceMain {
public static void main(String[] args) {
PointV a = new PointV();
a.x=10;
a.y=20;
swap1(a);
System.out.println("a.x:"+a.x+";a.y:"+a.y);//a.x:10;a.y:20
swap2(a,11,22);
System.out.println("a2.x:"+a.x+";a2.y:"+a.y);//a2.x:11;a2.y:22
}
/*實參引用沒有變,值沒變*/
public static void swap1(PointV a){
PointV b = new PointV();
b.x=11;
b.y=22;
a=b;
}
/*實參引用沒有變,值已變*/
public static void swap2(PointV a,int x,int y){
a.x=x;
a.y=y;
PointV b = new PointV();
b.x=13;
b.y=23;
a=b;
}
}
結果輸出:
a.x:10;a.y:20
a2.x:11;a2.y:22
c++引用
#include <iostream>
#include <string.h>
using namespace std;
class Pon{
public :
int x;
int y;
};
void swap0(int a,int b){
int temp=a;
a=b;
b=temp;
}
void swap1(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
void swap2(Pon &a){
Pon p ;
p.x=11;
p.y=22;
a=p;
}
int main(){
int a =10,b=20;
swap0(a,b);
cout<<"a0:"<<a<<";b0:"<<b<<endl;//a,b沒有交換值
swap1(a,b);
cout<<"a1:"<<a<<";b1:"<<b<<endl;//a,b已交換值
Pon *p =new Pon();
p->x=10;
p->y=20;
swap2(*p);
cout<<"p->x:"<<p->x<<";p->y:"<<p->y<<endl;//p中x,y的值被改變
Pon p2;
p2.x=10;
p2.y=20;
swap2(p2);
cout<<"p2.x:"<<p2.x<<";p2.y:"<<p2.y<<endl;//p中x,y的值被改變
return 0;
}
輸出結果:
a0:10;b0:20
a1:20;b1:10
p->x:11;p->y:22
p2.x:11;p2.y:22
結論:java中簡單數據類型和複雜數據類型作爲形參時,是值傳遞,實參的引用不被改變。但是當java的複雜數據類型作爲形參時,實參對象的子內容可以被修改,引用不變。
c++中簡單數據類型和複雜數據類型作爲形參時,引用沒有變,引用指向的對象內容可以變。可以修改其實參的內容(實參對象的子內容也可以被修改)。