java的方法参数传递方式有两种,按值传递和引用传递

1.按值传递

参数类型是int,long等基本数据类型(八大基本数据类型),参数传递的过程采用值拷贝的方式

代码片段1:

public class Test {

    public static void main(String[] args) {
int a = 5;
fun(a);
System.out.println(a);// 输出结果为5
} private static void fun(int a) {
a += 1;
}
}

2.引用传递

参数类型为引用类型,参数传递的过程采用拷贝引用的方式

代码片段2:

public class Test {

    public static void main(String[] args) {
A a = new A(5);
fun(a);
System.out.println(a.a);// 输出结果为6
} private static void fun(A a) {
a.a += 1;
} static class A {
public int a; public A(int a) {
this.a = a;
}
}
}

结论:按值传递,不会改变原来的值,引用传递,会改变引用对象的值

再看下面这种情况:

代码片段3:

public class Test {

    public static void main(String[] args) {
Integer a = 5;
fun(a);
System.out.println(a);// 输出结果为5
} private static void fun(Integer a) {
a += 1;
} }

这里明明是引用传递,为什么没有改变对象的值呢?

这里其实使用了基本数据类型封装类的自动装箱功能。

Integer a = 5,编译后实际为Integer a = Integer.valueOf(5),查看Integer的源码,并没有改变原对象的值,只是将其引用指向了另一个对象。


代码片段3中的过程可以用下图来表示:

直接改变了栈帧中的地址,指向另一个对象,所以并没有改变原来的值。

---------------------

本文来自 zhenge1990 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zhenge1990/article/details/78897166?utm_source=copy

【转】java方法参数传递方式--按值传递、引用传递的更多相关文章

  1. java方法参数传递方式只有----值传递!

    在通常的说法中,方法参数的传递分为两种,值传递和引用传递,值传递是指将实际参数复制一份传递到方法中, 在方法中的改动将不会影响到实际参数本身,而引用传递则是指传递的是实际参数本身,在方法中的改动将会影 ...

  2. 辨析Java方法参数中的值传递和引用传递

    小方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示. publ ...

  3. java 方法参数-值调用,引用调用问题

    (博客内容来自于core java卷一) 1. xx调用:程序设计语言中方法参数的传递方式: 引用调用(call by reference):表示方法接收的是调用者提供的变量地址. 值调用(call ...

  4. Java方法中传值和引用传递的问题(转)

    说明:标题其实说法是错误的.Java中只有值传递,没有引用传递. ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = ...

  5. C/C++语言参数传递----函数/方法 参数的指针引用传递

    int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv[]) { int n = ...

  6. Java方法的参数传递方式为: 值传递

    Java方法的参数传递方式为: 值传递 对于基本数据类型作为参数传递时, 是"按值传递", 这点都认识很清楚. 但是, 当对象或者说引用作为参数传递, Java 的参数传递方式是& ...

  7. 新手容易混乱的String+和StringBuffer,以及Java的方法参数传递方式。

    之前在交流群里和猿友们讨论string+和stringbuffer哪个速度快以及Java的方法参数传递的问题,引起了群里猿友的小讨论.最终LZ得出的结果是string+没有stringbuffer快, ...

  8. call_user_func()的参数不能为引用传递 自定义替代方法

    php手册 中关于 请注意,传入call_user_func()的参数不能为引用传递. 关于这个情况的解释,可自己搜索.我们可以自己定义一个函数解决这样的问题,实例如下: <?php ini_s ...

  9. **JAVA参数传递方式 (按值传递与引用传递区别)

    https://blog.csdn.net/q5706503/article/details/82910428public class TestMain { public static void ma ...

随机推荐

  1. ListBox使用

    一.什么是ListBox? ListBox 是一个显示项集合的控件.一次可以显示 ListBox 中的多个项. ListBox继承自ItemsControl,可以使用Items或者ItemsSourc ...

  2. Windows:chm 文件打开出现“已取消到该网页的导航”的解决方案

    症状 解决方案

  3. ADO与ADO.Net

    在介绍ADO.Net之前先让我们回想一下在红皮书中学习的ADO的内容. ADO(ActiveX Data Objects).我们称它为一种用于数据訪问的对象模型,<VB.Net>视频中称它 ...

  4. 如果类型是dynamic的且其属性也是dynamic的

    在 MVC 中,如果尝试如下的编码: public ActionResult TeacherInfo(string courseId) {     var x = LearningBll.GetTea ...

  5. 简单绕过Chrome密码查看逻辑,查看浏览器已保存的密码

    简单绕过Chrome密码查看逻辑,查看浏览器已保存的密码   利用场景: 同事或朋友外出有事,电脑未锁屏离开座位.可以利用这一间隙,查看Ta在Chrome浏览器上保存的账号密码 查看逻辑: 当我们要查 ...

  6. vanilla

    In information technology, vanilla (pronounced vah-NIHL-uh ) is an adjective meaning plain or basic. ...

  7. [转]MongoDB基本使用

    转自 : http://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可 ...

  8. [转]RSYNC 参数中文详解

    FROM : http://www.qiansw.com/rsync-cn.html rsync是一款好用的*nux文件同步工具.下面是其参数的中文解释. Rsync 参数选项说明 -v, --ver ...

  9. spring boot整合slf4j-log日志

    原文地址:https://blog.csdn.net/u011271894/article/details/75735915 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  10. chrome DevTools之黑箱大法(Blackbox ) 黑箱化源代码

    Blackbox 提高JavaScript调试效率 所有人前端开发人员都会遇到的问题,您的应用程序代码中会出现错误.您开始调试,但是逐行执行代码时,调试器有时会跳转到不是您的焦点的源文件(例如第三方J ...