【转】java方法参数传递方式--按值传递、引用传递
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方法参数传递方式--按值传递、引用传递的更多相关文章
- java方法参数传递方式只有----值传递!
在通常的说法中,方法参数的传递分为两种,值传递和引用传递,值传递是指将实际参数复制一份传递到方法中, 在方法中的改动将不会影响到实际参数本身,而引用传递则是指传递的是实际参数本身,在方法中的改动将会影 ...
- 辨析Java方法参数中的值传递和引用传递
小方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示. publ ...
- java 方法参数-值调用,引用调用问题
(博客内容来自于core java卷一) 1. xx调用:程序设计语言中方法参数的传递方式: 引用调用(call by reference):表示方法接收的是调用者提供的变量地址. 值调用(call ...
- Java方法中传值和引用传递的问题(转)
说明:标题其实说法是错误的.Java中只有值传递,没有引用传递. ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = ...
- C/C++语言参数传递----函数/方法 参数的指针引用传递
int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv[]) { int n = ...
- Java方法的参数传递方式为: 值传递
Java方法的参数传递方式为: 值传递 对于基本数据类型作为参数传递时, 是"按值传递", 这点都认识很清楚. 但是, 当对象或者说引用作为参数传递, Java 的参数传递方式是& ...
- 新手容易混乱的String+和StringBuffer,以及Java的方法参数传递方式。
之前在交流群里和猿友们讨论string+和stringbuffer哪个速度快以及Java的方法参数传递的问题,引起了群里猿友的小讨论.最终LZ得出的结果是string+没有stringbuffer快, ...
- call_user_func()的参数不能为引用传递 自定义替代方法
php手册 中关于 请注意,传入call_user_func()的参数不能为引用传递. 关于这个情况的解释,可自己搜索.我们可以自己定义一个函数解决这样的问题,实例如下: <?php ini_s ...
- **JAVA参数传递方式 (按值传递与引用传递区别)
https://blog.csdn.net/q5706503/article/details/82910428public class TestMain { public static void ma ...
随机推荐
- JSP页面中使用JSTL标签出现无法解析问题解决办法
今天建立一个JavaWeb工程测试JNDI数据源连接,在jsp页面中引入了JSLT标签库,代码如下: <%@ page language="java" import=&quo ...
- mysql slave 主从 指定表 通配符
slave配置 slave端有可能,只复制部分表,有一些表不需要备份配置如下: 有一些表你可能做水平或则垂直的处理.如果表的前几位一样,就可以用通配符%匹配 replicate-wild-ignore ...
- JavaScript进阶系列02,函数作为参数以及在数组中的应用
有时候,把函数作为参数可以让代码更简洁. var calculator = { calculate: function(x, y, fn) { return fn(x, y); } }; var su ...
- Delphi 局域网点对点文件传输(IdTcpClient控件)
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- ZServer4D开源项目
ZServer4D开源项目 ZServer4D 是一套从商业项目剥离而出的云服务器中间件,可以承载百万级的分布式负载服务,并且支持IoT及内网穿透. 作者将它开源了 https://github.co ...
- CATransition 实践
时间差不够,导致闪屏 CATransition *animation = [CATransition animation]; animation.delegate = self; animation. ...
- SharePoint SPUtility.SendEmail 发送邮件设置级别
前言 熟悉sharepoint开发的都知道,sharepoint默认有个发送邮件的方法,不过,最近有个需求,用户希望发送邮件的时候,带上邮件的级别. 经过研究,发现有下面的办法,可以添加邮件的发送级别 ...
- Android判断用户的网络类型(2/3/4G、wifi)
很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑.但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下. 一加手机一代,移动4G 网络,得到的subtype类型值为17 ...
- android之卸载反馈的功能
感谢这位大神:http://www.eoeandroid.com/thread-317728-1-1.html zip包里面有讲解的试用方法,和如何试用ndk编译的方法,本人亲身试验,确实可用,现做一 ...
- [Web 前端] CSS篇之 4. position 和 display 的取值和各自的意思和用法
讲一讲CSS的position/float/display都有哪些取值,它们相互叠加时的行为都是什么? 列出display的值,说明他们的作用.position的值, relative和absolu ...