关于Java中的数组,下面的一些描述,哪些描述是准确的:( )
A
数组是一个对象,不同类型的数组具有不同的类
B
数组长度是可以动态调整的
C
数组是一个连续的存储结构
D
一个固定长度的数组可类似这样定义: int array[100]
E
两个数组用equals方法比较时,会逐个遍历其中的元素,对每个元素进行比较
F
可以二维数组,且可以有多维数组,都是在Java中合法的
答案:ACF
官方解析:当数组的初始化完成后数组在内存中所占用的空间将会被固定,即使我们清空这个数组中的元素,它所占用的空间依然会被保留。这造成了Java数组长度的不可变,选项B错误。
Java语言中,数组是一种引用类型的变量,使用它定义变量时,这个引用变量还没有指向任何有效的内存空间,因此定义数组时不能指定数组的长度。而由于这个引用变量并没有指向任何有效的内存空间,所以没有空间来存储任何元素,只有当对数组初始化后,才可以使用这个数组。D选项正确的定义方式为int[] array =new int[100]。
本题易错点是E选项,数组是一种引用数据类型,继承自Object类的,所以其中也包含了未被重写的equals()方法,所有的引用变量都能调用equals()方法来判断他是否与其他引用变量相等,使用这个方法来判断两个引用对象是否相等的判断标准与使用==运算符没有区别,只有在两个引用变量指向同一个对象才会返回true。如果想达到E选项描述的效果,需要使用Arrays.equals()方法。
——————————————————————————————————————————
线程的生命周期的状态相互转换:
以下代码执行后输出结果为( )
public class ClassTest{
String str = new String("hello");
char[] ch = {'a','b','c'};
public void fun(String str, char ch[]){
str="world";
ch[0]='d';
}
public static void main(String[] args) {
ClassTest test1 = new ClassTest();
test1.fun(test1.str,test1.ch);
System.out.print(test1.str + " and ");
System.out.print(test1.ch);
}
}
答案:hello and dbc
我没看懂解析;但是有一种说法是 String 里是定义了final 的char[] 所以不被改变;但是当我将
final char[] ch = {'a','b','c'};
在char之前加上了final修饰。它结果依旧被改变。
当 我把String类型 改成了int类型,他的值还是没变。
另一种说法就是值传递和引用传递
值传递,只是值传递,并不指向同一对象的值修改,于是str 没变;而char数组,是引用传递,于是结果是被修改了的。