资讯专栏INFORMATION COLUMN

Java的call by value和call by reference

NickZhou / 2540人阅读

摘要:笔试题的和题目如下传参的两种方式值传递传递的是值针对基本数据类型,如传递一个整型数值。实际上,按值传递在方法调用方法中,参数只是实际参数的一份拷贝。引用传递传递的是对象的引用针对对象,即传递的是对象的地址。

【笔试题】 Java的call by value和call by reference 题目如下:

Java传参的两种方式

call by value(值传递):传递的是值(针对基本数据类型),如传递一个整型数值。实际上,按值传递在方法调用方法中,参数只是实际参数的一份拷贝。

call by reference(引用传递):传递的是对象的引用(针对对象),即传递的是对象的地址。实际上,引用按传递时候会产生一份新的引用拷贝,新旧两份引用同时指向同一个地址。

代码示例
public class TestJavaCallBy {

    // 测试值传递
    public static void testCallByValue(int value) {
        value *= 10;
    }

    // 测试引用传递
    public static void testCallByReference(StringBuilder sb) {
        sb.append(" - " + ZonedDateTime.now());
    }

    public static void main(String[] args) {

        // 测试值变量
        int param = 1;
        // 测试引用对象
        StringBuilder sb = new StringBuilder("666");

        // 测试
        System.out.println(param);
        testCallByValue(param);
        System.out.println(param);

        System.out.println(sb.toString());
        testCallByReference(sb);
        System.out.println(sb.toString());
    }
}

控制台输出结果
1
// 结果仍为1,因为参数传递的是实参的一份拷贝,对实参不造成影响
1 

666
// 传递的是引用的拷贝,新旧两个引用指向同一个对象(地址),因此append操作是作用在该对象上
666 - 2019-03-16T01:25:57.933038500+08:00[Asia/Shanghai] 
那么就能得出一下结论:

call by value不会改变实参的值

call by reference不能改变实参的参考地址

call by reference能改变实参的内容

那么这道题的答案就是这样。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73719.html

相关文章

  • call by sharing——JavaScript中“共享传参”“按值传参”理解

    摘要:众所周知,中参数是按值传递的。先大概介绍按值传参基本类型基本类型的参数传递比较简单,示例代码的值复制给了函数内部的局部变量所以在函数内部改变的值并不会影响外部的值。 众所周知,JavaScript中参数是按值传递的。与访问变量不同,基本类型和引用类型的参数在传递时都如同变量的复制。 但是我们在使用引用类型的参数传递时,经常会发现在函数内改变引用类型参数(如对象)会在函数外反映出来,这种...

    jsdt 评论0 收藏0
  • Learning Notes - Understanding the Weird Parts of

    摘要:标签前端作者更多文章个人网站 Learning Notes - Understanding the Weird Parts of JavaScript 标签 : 前端 JavaScript [TOC] The learning notes of the MOOC JavaScript: Understanding the Weird Parts on Udemy,including...

    inapt 评论0 收藏0
  • JS中值是按值传递,还是按引用传递呢?

    摘要:按引用传递时,函数的形参接收实参的隐式引用,而不再是副本。探究值的传递方式的基本类型,是按值传递的。但这样是否说明的对象是按引用传递的呢我们再看下面的例子仍然是并未被修改为如果是按引用传递,修改形参的值,应该影响到实参才对。 最近遇到个有趣的问题:JS中的值是按值传递,还是按引用传递呢? 在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(ca...

    Jochen 评论0 收藏0
  • 谈谈java中几种常见散列算法及解决哈希碰撞方式

    摘要:接下来分析几个常见的实现方式。再哈希法再哈希法,就是出现冲突后采用其他的哈希函数计算,直到不再冲突为止。,其中为不同的哈希函数。 由表及里,循序渐进,请往下看。随手点赞是对作者最大的鼓励!^0^。 什么是哈希表 引用:严蔚敏 《数据结构(C语言版)》中的内容 showImg(https://segmentfault.com/img/bVZlmE?w=800&h=364); 哈希表就是 ...

    沈建明 评论0 收藏0
  • 并发学习笔记(1)

    摘要:共享数据使线程之间的通信比进程之间的通信更有效。并发模型和的区别说明的作用是启动一个新线程操作系统级别,有一个方法启动新线程,新线程会执行相应的方法。单独调用会在当前线程中执行并不会启动新线程创建一个线程即可但是这个线程没有执行任何代码段。 tutorials site 并发Concurrency发展的历史 单CPU,一次只能运行一个程序 -- 多任务,一次同时运行多个任...

    objc94 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<