程序员人生 网站导航

C++,Java值传递,引用传递

栏目:php教程时间:2015-04-08 08:44:10

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 } }












------分隔线----------------------------
------分隔线----------------------------

最新技术推荐