C++,Java值傳遞,引用傳遞
來源:程序員人生 發布時間:2015-04-08 08:44:10 閱讀次數:3531次
1.除內置類型、STL迭代器和函數對象采取“pass-by-value”(值傳遞),其他盡可能采取pass-by-reference-const
替換 pass-by-value,實現情勢“const A&”;
2.Java中的值傳遞,援用傳遞問題:
(1):“在Java里面參數傳遞都是按值傳遞”這句話的意思是:按值傳遞是傳遞的值的拷貝,按援用傳遞其實傳遞的是援用的地址值,所以統稱按值傳遞。
Java
編程語言只有值傳遞參數。當1個對象實例作為1個參數被傳遞到方法中時,參數的值就是該對象的援用1個副本。指向同1個對象,對象的內容可以在被調用的方法中改變,但對象的援用(不是援用的副本)是永久不會改變的。
如果參數類型是原始類型,那末傳過來的就是這個參數的1個副本,也就是這個原始參數的值,這個跟之前所談的傳值是1樣的。如果在函數中改變了副本的值不會改變原始的值.
如果參數類型是援用類型,那末傳過來的就是這個援用參數的副本,這個副本寄存的是參數的地址。如果在函數中沒有改變這個副本的地址,而是改變了地址中的值,那末在函數內的改變會影響到傳入的參數。如果在函數中改變了副本的地址,如new1個,那末副本就指向了1個新的地址,此時傳入的參數還是指向原來的地址,所以不會改變參數的值。
(2):在Java里面只有基本類型和依照下面這類定義方式的String是按值傳遞,其它的都是按援用傳遞。就是直接使用雙引號定義字符串方式:Stringstr =
“Java”;
C++與Java的區分:
// Test1.cpp : C++ 實現
//
#include "stdafx.h"
#include <iostream>
using std::cout;
class A
{
public:
int num = 1;
};
void changeA(A& a)
{
a.num = 2;
}
void changeAA(A& a)
{
A other;
a = other;
a.num = 3;
}
int _tmain(int argc, _TCHAR* argv[])
{
A test;
cout<<test.num<<std::endl;//輸出1
changeA(test);
cout << test.num << std::endl;//輸出2
changeAA(test);
cout << test.num << std::endl;//輸出3
return 0;
}
</pre><pre class="java" name="code">//Java
package test;
public class Main10 {
private static class A
{
public int num = 1;
}
private static void changeA(A a)
{
a.num = 2;
}
private static void changeAA(A a)
{
a = new A();
a.num =3;
}
public static void main(String[] args){
A test = new A();
System.out.println(test.num);//輸出1
changeA(test);
System.out.println(test.num);//輸出2
changeAA(test);
System.out.println(test.num);//輸出2
}
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈