美文网首页
四、java中的参数传递问题

四、java中的参数传递问题

作者: lifeline张 | 来源:发表于2019-04-01 11:37 被阅读0次

一、先下结论:

基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的;在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数,而不是把引用本身传进去。

二、基本数据类型的传递实例:

2.1、实例一
public class Test1 {

       public static void main(String[] args) {

        int n = 3;

        System.out.println("Before change, n = " + n);

        changeData(n);

        System.out.println("After changeData(n), n = " + n);

    }

      

       public static void changeData(int n) {

        n = 10;

    }

}

运行结果:


image.png
2.2、实例二
public class ParamTransfer {
     public int money;
        
        public void amethod(int i) {
            System.out.println("方法得到的i的值:" + i);
            i = i * 5;
            System.out.println("方法执行语句i=i*5后i的值:" + i);
            System.out.println("money的值:" + this.money);
        }

        public static void main(String[] args) {
            ParamTransfer pt = new ParamTransfer();
            pt.money = 100;
            pt.amethod(pt.money);
        }
}

运行结果:


image.png
2.3、实例三
package ObjectRef;

public class ObjectRef {

    public static void mothed1(){
        int x=0;
        int y=1;
        switchValue(x,y);
        System.out.println("x="+x);
        System.out.println("y="+y);
    }
    static void switchValue(int a,int b){

        int c=a;
        a=b;
        b=c;
    }
        
    public static void main(String[] args) {
        mothed1();  
    }
}

运行结果:


image.png

三、引用类型的参数传递

3.1、实例一:貌似是按引用传递的实例
package ObjectRef;

public class Test2 {

    public static void main(String[] args) {

     StringBuffer sb = new StringBuffer("Hello ");

     System.out.println("Before change, sb = " + sb);

     changeData(sb);

     System.out.println("After changeData(n), sb = " + sb);

 }
 

    public static void changeData(StringBuffer strBuf) {

     strBuf.append("World!");

 }

}

运行结果:


image.png

从结果来看,sb的值被改变了,那么是不是可以说:对象作为参数传递时,是把对象的引用传递过去,如果引用在方法内被改变了,那么原对象也跟着改变。从上面例子的输出结果来看,这样解释是合理。

3.2、反驳上面的例子
package ObjectRef;

public class Test3 {

    public static void main(String[] args) {

     StringBuffer sb = new StringBuffer("Hello ");

     System.out.println("Before change, sb = " + sb);

     changeData(sb);

     System.out.println("After changeData(n), sb = " + sb);

 }

   

    public static void changeData(StringBuffer strBuf) {

        strBuf = new StringBuffer("Hi ");

        strBuf.append("World!");

 }

}

按照上面例子的经验:对象作为参数传递时,是把对象的引用传递过去,如果引用在方法内被改变了,那么原对象也跟着改变。你会认为应该输出:

Before change, sb = Hello

After changeData(n), sb = Hi World!
但是实际是:
运行结果:


image.png

分析:


image.png
image.png
image.png
image.png
image.png

相关文章

  • 四、java中的参数传递问题

    一、先下结论: 基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的;在Java中对象...

  • C语言 函数传参的理解

    C语言有点东西 不像JAVA 不需要复杂考虑参数传递问题 java就两种参数传递方式 值传递AND引用传递...

  • Java参数传递问题

    关于Java参数传递问题的一点思考, 主要关注以下两个问题: 1. 参数是如何传递的? 参数通过复制的方式传递。 ...

  • Java中的传递是值传递

    Java中的参数类型 形式参数,即形参 实际参数,即实参 Java中的两种参数传递情况 值传递:指在进行函数方法调...

  • 解决java中的参数传递问题

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • Java 参数传递问题

    Java参数传递 给出了基本类型和引用类型参数传递时行为的示例,并给出了String类型作为参数传递时表现出的和一...

  • Practical Java: 一般技术

    实践1:参数以by value方式而非by reference方式传递 Java中的参数以by value方式传递...

  • java中值传递和引用传递

    一.java中的值传递的问题 指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下: public stati...

  • Java 参数的传递

    Java 的参数是值传递,不是引用传递 Java 中只有值传递,方法按值调用(call by value)。也就是...

  • Java 基础笔记

    一、Java中参数传递 Java中方法的参数传递实际上都是值传递,有别于C/C++;在使用对象传递时只能修改对象的...

网友评论

      本文标题:四、java中的参数传递问题

      本文链接:https://www.haomeiwen.com/subject/qunmbqtx.html