跳至主要內容

Different

LincZero大约 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中内部类比委托更加有用。