先看个例子
![例子1](https://img-blog.csdn.net/20160902184759632)
这里输出的结果是:false
这里看下equals的源码
![源码1](https://img-blog.csdn.net/20160902185854894)
显而易见,只有当两个if都不通过时,显false
1.所在内存
数组所在内存图
![例子2](https://img-blog.csdn.net/20160902191951207)
数组里的值是保存在:堆内存
2.
char[]是引用类型
String是个类
所以 无法 instanceof
下面整理数组部分的知识:
1.定义数组时不能指定数组的长度(这里要和C/C++区分开来)
因为此时数组是一种引用类型的变量,还未指向任何有效的内存
2.指定初始值时,系统按照如下规则进行分配初始化:(数组元素的类型)
整数类型(byte short int long),—–》0
浮点类型(float double)—–》0.0
字符类型(char)—–》’\u0000’
布尔类型(boolean)—–》false
引用类型(类 接口 数组)—–》null
3.使用foreach循环迭代数组元素时,并不能改变数组元素的值
如果删除操作,则可能引发ConcurrentModificationException异常
4.char[][] 定义了二位字符数组。在Java中,使用字符串对char数组赋值,必须使用toCharArray()方法进行转换。
补充:
真数组:也是Java特性之一
(1)在内存中连续分配。
(2)数组所存在的内存空间为数组专用,避免了数据被覆盖的问题。
(3)数组内存放的类型是确定的,唯一的。
详细可查看各种百科,名词。
Java没有多维数组
type[][] arrName;
arrName = new type[length][];
这个二维数组实际上完全可以当成一维数组使用:使用new type[length]初始化一维数组后,相当于定义了length个type类型的变量;类似的,使用new type[length][]初始化这个数组后,相当于定义了length个type[]类型的变量。
下面判断两个二维数组维度是否一样
public static boolean equals(int[][]a,int[][]b){
if (a==b)
return true;
if (a==null || b==null)
return false;
int lengthOfa = a.length;
int lengthOfb = b.length;
if (lengthOfa!=lengthOfb)
return false;
for (int i=0; i<lengthOfa; i++) {
if(!Arrays.equals(a[i], b[i]))
return false;
}
return true;
}