非常简单的问题,看你能不能答出来!
public class Exercise {
public static void main(String[] args) {
int result = 0;
String[] namesResult = new String[8];
setResult(result);
setResultAr(namesResult);
for (int i = 0; i < namesResult.length; i++) {
if (i == result) {
System.out.println(namesResult[i]);
break;
}
}
}
private static void setResult(int resultReturn) {
resultReturn = 3;
}
private static void setResultAr(String[] arr) {
String[] namesResultReturn = {"a", "b", "c", "d", "e", "f", "g", "h"};
for (int i = 0; i < arr.length; i++) {
arr[i] = namesResultReturn[i];
}
}
}
请问这段代码输出啥,并说出原因! --------------------编程问答-------------------- 输出结果为a
setResult的参数类型为int,不会改变传入变量的值,这里赋值无效。
setResultAr的参数类型为数组,不会改变传入引用所指向的对象,但是可以改变传入引用指向对象的值,这里赋值有效。 --------------------编程问答-------------------- 很明显输出a,首先传入的参数一定是一个对象的引用或是一个原生类型常量。而对于原生类型当传入到方法setResult中后,main方法中的result和setResult的传入的result的值就没有半毛钱的关系了,所以最后的main方法中的result还是0,而对于setResultAr传入的是一个引用的实例对象,这个namesResult和main中的namesResult引向的是同一个内存地址,在setResultAr方法中改变的是对象引用中的值而不是对象引用本身,所以最后赋值成功了,打印出a。。。。。 --------------------编程问答-------------------- 这个能输出什么??? --------------------编程问答-------------------- 真的是a,看来我SE学得还是不够 --------------------编程问答-------------------- 只输出a。
因为main入口中调用setResult(result);并不会改变result的值,因为result是基本数据类型,所以值还是0;setResultAr(namesResult);给namesResult循环赋值成功了,因为数组属于引用类型,在方法内改变了内容,那么内容就改变了;最后,通过判断i == result,执行System.out.println(namesResult[i]);输出namesResult[0]的值a。 --------------------编程问答-------------------- 基本数据类型和String 传值,
其他类型传址, (其实这里的址 也是值, 是指向内存地址的这个指向的值.并不是内存里的值) --------------------编程问答-------------------- 除
补充:Java , Java EE