关闭

java 值传递or引用传递?

标签: java
56人阅读 评论(0) 收藏 举报
分类:

先上代码

public class Test {
    public static void main(String[] args) {
        int i=1;
        System.out.println("i is "+i);
        change1(i);
        System.out.println("i is "+i);
        MuObject muObject = new MuObject(4);
        System.out.println("muObject is "+ muObject);
        change2(muObject);
        System.out.println("muOjbect is "+ muObject);
    }

    public static void change1(int i){
        i=4;
        System.out.println("change i to "+i);
    }

    //说明 java的参数都是值传递, 这里传递的只是复制对象的引用地址给局部变量muObject上
    public static void change2(MuObject muObject){
        muObject = new MuObject(2);
        System.out.println("change muObject to "+muObject);
    }

    static class MuObject{
        public int i;
        public MuObject(int i){
            this.i=i;
        }
        @Override
        public String toString() {
            return "MuObject [i=" + i + "]";
        }
    }
}

这里写图片描述
当调用方法时,方法会自动生成一个局部变量,并且外面的对象的引用地址被复制到这里,所以方法中的赠Object也是指向堆里的对象(4)
而这里给方法中的muObject赋值对象(2),相当于下图
这里写图片描述
所以,对于方法中的muObject它的引用地址已经改变了,但外面的对象它的引用地址还是对象(4),由此可知方法的传参还是值引用,只是引用类型的值是引用地址地址而已!

0
0
查看评论

JAVA中值传递和引用传递的三种情况

前言我们都知道,java中数据类型分为基本数据类型和引用数据类型。 基本数据类型 - 整型:byte,short,int,long - 浮点型:float,double - 字符型:char - 布尔型:boolean 引用数据类型 - 数组 ...
  • zhzhao999
  • zhzhao999
  • 2016-12-04 00:14
  • 2604

Java到底是值传递?还是引用传递?

前言 最近和同事讨论算法效率问题无意中涉及到一个问题,java中调用方法的时候是值传递呢?还是引用传递?网上搜索一下相关问题,众说纷纭,有人说值传递,有人说引用传递,还有人说”基础类型是值传递,对象类型是引用传递“。那么我们就用简单客观的代码分析一下。 值传递 值传递是指将该值复制一份...
  • xiaosha009
  • xiaosha009
  • 2016-02-17 14:23
  • 1677

java值传递和引用传递 面试题

前言 某坑公司的面试题如下 我认真了想想,这无非就是Java 的值传递和引用传递,利用反射是可以做到的 反射public static void doSomethingReflect(Integer a, Integer b) throws Exception { Field ...
  • CSDNno
  • CSDNno
  • 2017-05-21 10:53
  • 745

Java的参数传递到底是引用传递还是值传递

首先看一段代码:public static void main(String[] args) { Person a = new Person(23, "a"); Person b = new Person(22,"b"); System...
  • panyongcsd
  • panyongcsd
  • 2016-08-30 17:14
  • 2047

java中按值传递和引用传递区别

java中传参方式
  • morgerton
  • morgerton
  • 2017-02-08 12:54
  • 1321

帮助你彻底理解值Java中的传递和引用传递

最近在学习ndk开发时,对指针的概念了解的有点含糊。在这里简单的定义为一块内存地址。申请到一块内存后,比如 i=3;如果将其传入到一个方法体内,任意改变i,则最终i的支部会发生任何变化。接下来我们就以计算机的思路来探究一下。值传递比如我们打开我们的相关java调试类: 我们douzhdou知道,...
  • androidstarjack
  • androidstarjack
  • 2017-04-29 22:01
  • 787

值传递和引用传递的区别

所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。 所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。 值传递,例如: cla...
  • liqianglai
  • liqianglai
  • 2014-05-09 16:23
  • 4545

java中按值传递还是按引用传递--string

thinking in Java 中解释是这样的:不管是基本类型还是对象类型,都是传值。这种说法是把引用的副本也看作了一种“值”,也能够说的过去,但是本人还是更赞成将按值传递和按引用传递分开比较好理解。引自----http://smile2015.blog.51cto.com/9250194/162...
  • wabiaozia
  • wabiaozia
  • 2016-09-10 08:19
  • 1131

java里的值传递和引用类型传递的经典面试题

/* * 面试题: * 1:String,StringBuffer,StringBuilder的区别? * A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。 * B:StringBuffer是同步的,数据安全,效率低;String...
  • wuxizhi777
  • wuxizhi777
  • 2016-06-04 23:17
  • 1844

Java中值传递和引用传递实例

Java中值传递和引用传递实例
  • u012273328
  • u012273328
  • 2016-04-15 12:05
  • 1305
    个人资料
    • 访问:180次
    • 积分:21
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档