当前位置:编程学习 > JAVA >>

非常简单的问题,看你能不能答出来!


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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,