A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

来试试自己对于java值传递的理解

public class Example {

    String str = new String("good");

    char[] ch = { 'a', 'b', 'c' };

    public static void main(String args[]) {

        Example ex = new Example();

        ex.change(ex.str, ex.ch);

        System.out.print(ex.str + " and ");

        System.out.print(ex.ch);

    }

    public void change(String str, char ch[]) {

        str = "test ok";

        ch[0] = 'g';

    }
}

3 个回复

倒序浏览
本帖最后由 freshnboy 于 2016-3-17 11:11 编辑

运行应该结果是“good and gbc”
首先 str 和 ch两个变量是example的成员变量,并且初始值是good和 [a,b,c]
其次 change方法内的string类型变量不能改变传入的参数值,这里好像有个“string类型虽然是引用数据类型但是在当做参数传入的时候跟基本数据类型差不多”的知识点。而数组名是引用数据类型,所以它可以改变对应内存中的值。
最后输出是“good(初始化之后没被改变) and(你自己加的) gbc(只改变了ch[0],后面的没变)”。
回复 使用道具 举报
看一下Java中参数传递机制(值传递)
回复 使用道具 举报
首先第一点 String 传值传的是地址值。二、change方法中String类型的参数,哪怕是跟传入的变量名一样。参数列表中的参数,只属于方法中定义的一个变量,两者都没有一毛钱关系。方法在操作完后就进行释放了 ,并没有改变主方法调用的变量。 数组传递也是传递地址值。两个数组指向一个地址值,但是你对地址中的参数进行了操作,所以两个数组变量都会有所改变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马