Different
大约 1 分钟
Different
目录
指针类型
数组指针
Java数组与C++数组在堆栈上有很大不同
int [] a = new int[100]; // Java 堆 heap
等同于
int*a = new int[100]; // C++ 堆 heap
而不同于
int a[100]; // C++ 栈 stack
多维数组同理
double[][] balances = new double[10][6]; // Java
等同于
double** balances = new double*[10]; // C++,这种可以是不规则数组
不同于
double balances[10][6]; // C++
也不同于
double (*balances)[6] = new double[10][6]; // C++
Java中的[]运算符被预定义为检查数组边界,而且没有指针运算,即不能通过a加1得到数组的下一个元素
函数指针
有无函数指针
- C和C++
- 可以从函数指针执行任意函数。
- Java
- 从表面上看,Java没有提供方法指针,即将一个方法的存储地址传给另外一个方法,以便第二个方法能够随后调用它。
- 代替方案
- 事实上,Java的设计者曾说过:方法指针是很危险的,并且常常会带来隐患。他们认为Java提供的**接口(interface)**是一种更好的解决方案。
- 然而,反射机制允许你调用任意方法。
- J++/C#
- 微软公司为自己的非标准Java语言J++(以及后来的C#)增加了另一种被称为**委托(delegate)**的方法指针类型, 它与Java中的Method类不同。Java中内部类比委托更加有用。