- C++的指针和Java中的引用比较像,在作为函数参数传递时,都可以在函数内部改变 ”外部“ 的值
- C++的引用使用时必须是初始化的,他是一段内存的别名,因此也可以在函数内部改变”外部“的值,但是有一点不同是,它作为参数传递时在函数内部不能改变其本身的指向
C++ 代码:
#include <iostream>
using namespace std;
class Test {
public:
Test(int num) {
this->num = num;
}
public:
int num;
};
void change1(Test & t) {
t.num = 2;
// t = new Test(3); // 报错: 引用再次赋值
}
void change2(Test *t) {
t->num = 2;
t = new Test(3); // 指针再次赋值,指向新内存
}
int main(int argc, char const *argv[])
{
Test t = Test(1);
cout << "------引用---------" << endl;
cout << t.num << endl;
change1(t);
cout << t.num << endl;
Test *t2 = new Test(1);
cout << "------指针---------" << endl;
cout << t2->num << endl;
change2(t2);
cout << t2->num << endl;
return 0;
}
输出:
------引用---------
1
2
------指针---------
1
2
Java 代码:
class Test {
public int num;
Test (int num) {
this.num = num;
}
}
public class Learn {
public static void change(Test t)
{
t.num = 2;
t = new Test(3); // 引用 t 再次指向新对象,更像是 C++ 中的指针
}
public static void main(String[] args) {
Test t = new Test(1);
System.out.println(t.num);
change(t);
System.out.println(t.num);
}
}
输出:
1
2
网友评论