把个人其他博客的文章慢慢搬过来,主要是能上传代码附件。
(1)Java中的基本类型比如int,bool等是值传递。
(2)对象类型则类似于C中的指针传递:
2.1当修改参数的指向时不影响函数外部的变量,其仍然指向原来的对象。
2.2但是修改参数指向的对象的成员变量时,此修改作用的对象实际上与函数外部的对象是同一个,修改被保存。
Java中的“引用”和C++中的引用的对比:
C++代码:
输出:8. 就是当引用的目标改变了后,引用也跟着改变,所以把ref当做target的别名更容易理解,即ref就是target。
Java代码:
输出ref=5。即ref和target是独立的。ref指向的目标不受target的影响。
(1)Java中的基本类型比如int,bool等是值传递。
(2)对象类型则类似于C中的指针传递:
2.1当修改参数的指向时不影响函数外部的变量,其仍然指向原来的对象。
2.2但是修改参数指向的对象的成员变量时,此修改作用的对象实际上与函数外部的对象是同一个,修改被保存。
class Test{
public static void testChangeInt(int a) {
System.out.println("Old value:"+a); //Old value:5
a = ++a;
System.out.println("New value before return:"+a); //a:6。只在此函数内为6
}
public static void swap(String a, String b) {
String t;
t = a;
a = b;
b = t;
System.out.println("a New value before return:"+a); //bbbb
System.out.println("b New value before return:"+b); //aaaa。只在此函数内交换了
}
public static void appendWorld(StringBuffer sb) {
System.out.println("sb Old value:"+sb);
sb.append("world."); //改变成员变量
System.out.println("sb New value before return:"+sb); //hello world。
}
public static void main( String[] args ) {
System.out.println("Main func start.");
int ti = 5;
testChangeInt(ti);
System.out.println("New value after return:"+ti); //ti:5。不被函数改变
System.out.println("----------------------------");
String a = new String("aaaaa");
String b = new String("bbbbb");
swap(a,b);
System.out.println("a New value after return:"+a); //aaaa
System.out.println("b New value after return:"+b); //bbbb 变量指向的目标不被函数改变。
System.out.println("----------------------------");
StringBuffer sb = new StringBuffer("Hello ");
appendWorld(sb);
System.out.println("sb New value after return:"+sb.toString()); //Hello world。变量指向的目标没变,但是目标的成员变量被改变了。
System.out.println("----------------------------");
}
}
Java中的“引用”和C++中的引用的对比:
C++代码:
#include <iostream>
using namespace std;
int main(int,char**)
{
int other = 8;
int target = 5;
int& ref = target;
target = other;
cout << ref << endl;
}
输出:8. 就是当引用的目标改变了后,引用也跟着改变,所以把ref当做target的别名更容易理解,即ref就是target。
Java代码:
class Ref {
public static void main(String[] args) {
int other = 8;
int target = 5;
int ref = target;
target = other;
System.out.println("ref="+ref);
}
}
输出ref=5。即ref和target是独立的。ref指向的目标不受target的影响。