今天在写了类似如下这样一段代码: String[][] inputMatrix = new inputMatrix[M][N]; for(int i=0; i<M; i++){ inputMatrix[i] = br.readline().split(","); } 觉得不妥,凭直觉改为如下: String[][] inputMatrix = new inputMatrix[M][]; for(int i=0; i<M; i++){ inputMatrix[i] = br.readline().split(","); } 仔细思考,我有两个疑问: 1、java数组的内存管理方式 我发现所有的java数组均可以做为左值,这跟c、c++数组有很大的不一样. 比如c++中是不允许这样的: int a[3][3]; int b[3]; a[1] = b;//这个是不允许的 2、如何查看java中对象的内存占用情况 想查看以下java是如何分配内存的,但是没有发现java有相应的函数供使用 google之后关于这两个问题的解答: 1、java数组的内存并不是连续分配的,把二维数组看成数组的数组,也就是一个一维数组,每个数组的元素为一个一维数组的对象。 关于此的一个有趣的问题为: short[] m = new short[20]; short[][] m = new short[2][10]; 这两种声明方式,都是声明一个能够装下20个short元素的容器,哪个所占用的空间更大? 问题的答案为第二个,因为其创建了三个对象(m, m[0], m[1]),而第一个只创建了一个对象(m)。 (参见该例子的原始出处) 2、由于java屏蔽了内存的操作,所以是没有办法来具体获知某些对象所占用的内存空间。但是可以通过Runtime的一些关于heap的信息,来近似地估计 对象所占用的内存大小。 文章Java Tip 130: Do you know your data size?中详细阐述了如何使用该方法。 此处提供一个测试上面两点的例子,点击下载。 Java虽然易学,但是在工程中要能真正写出好的程序,需要功底的。C++的话,程序的处理或许复杂一些,但是编写者对程序运行的理解也会更深刻一些, 优秀的C++程序员能够通过其写出比Java更高效地程序。