java的引用和c++的引用

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++中簡單數據類型和複雜數據類型作爲形參時,引用沒有變,引用指向的對象內容可以變。可以修改其實參的內容(實參對象的子內容也可以被修改)。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章