1. 基本数据类型

public class ValueTransferTest {
public static void main(String[] args) {
int m = 10;
int n = 20; System.out.println("交换前:");
System.out.println("m = " + m + ", n = " + n); ValueTransferTest test = new ValueTransferTest(); test.swap(m, n); System.out.println("交换后:");
System.out.println("m = " + m + ", n = " + n);
} public void swap(int m, int n) {
int temp = m;
m = n;
n = temp;
}
}

结果

交换前:
m = 10, n = 20
交换后:
m = 10, n = 20

原因

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
  • 就是说,当在main方法里把实参传递给swap方法后,在swap方法里是交换了m,n的值,但是main方法里的m,n并没有变,因为没有改变main方法中变量存储的数据值

2. 引用数据类型

package com.gzl;

public class ValueTransferTest {
public static void main(String[] args) {
Data data = new Data(); data.m = 10;
data.n = 20; System.out.println("交换前:");
System.out.println("m = " + data.m + ", n = " + data.n); ValueTransferTest test = new ValueTransferTest(); test.swap(data); System.out.println("交换后:");
System.out.println("m = " + data.m + ", n = " + data.n);
} public void swap(Data data) {
int temp = data.m;
data.m = data.n;
data.n = temp;
}
} class Data {
int m;
int n;
}

结果

交换前:
m = 10, n = 20
交换后:
m = 20, n = 10

原因

  • data变量存储的是Data对象的引用(地址),而m和n保存在对象内,无论是实参data还是形参data,都是指向同一个对象,因此修改的也是同一个对象。

3. 总结

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
  • 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值

java值传递机制的更多相关文章

  1. java的值传递机制

    一.练习:编写Java程序,将二维数组中的行列互调显示出来. 代码1为自己编写: package com.xxgpra.CH6; public class Hangliehudiao_pra4 { p ...

  2. java 面向对象(六):类结构 方法(三) java的值传递机制

    java的值传递机制 1.针对于方法内变量的赋值举例: System.out.println("***********基本数据类型:****************"); int ...

  3. String 不变性以及 Java 值传递和引用传递

    String 不变性以及 Java 值传递和引用传递 public class Example { String str = new String("good"); char[] ...

  4. 老生常谈--Java值传递和引用传递

    起因 前两天面试被问到了这个问题,虽然之前老早就了解过这个问题,但是并没有深入了解,所以面试的时候一下子慌了,菜是原罪,今天菜鸡来补补基础知识. 其实这个问题一直是被讨论的,常见的三种说法就是,1,J ...

  5. java — 值传递和引用传递

    在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java 应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数.参数可以是对象引用,而 Java ...

  6. 关于Java 值传递深度分析

    首先说观点:java只有值传递没有引用传递 然后再来看看值传递与引用传递两者的定义 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改, ...

  7. Java值传递和引用传递详细解说

    前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是 Java中到底是否只存在值传递,因为在查阅资料时,经常看到 ...

  8. JAVA 值传递

    Java里方法的参数传递方式只有一种:值传递 值传递:当系统开始执行方法时,系统为形参执行初始化,就是把实参变量的值赋给方法的形参变量,方法的操作的并不是实际的实参变量 引用型变量:系统复制的是变量, ...

  9. 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!

    看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了.还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎 ...

  10. java 值传递和引用传递。

    java中 基本类型的参数传递是值传递,即前后两个方法的变量不相干,被调方法参数值改变不影响调用方法的传参数值. 引用数据类型的参数传递是 传递的是参数的地址.即被调方法修改参数值会,调用方法里会跟着 ...

随机推荐

  1. 活动回顾:Flutter实时音视频应用场景实践

    11月7日,即构和上海GDG技术社区联合举办了实时音视频技术云上技术分享专场,来自即构科技和Bilibili的资深技术专家进行了深度分享.大会吸引了500+开发人员交流.观看,并在活动过程中与分享嘉宾 ...

  2. Hexo博客Yilia主题添加相册功能,丰富博客内容,Next等其他主题可以参考

    实现思路 1.在主页上必须有一个可供点击的相册连接 2.要用 hexo 生成一个photos.html文件 3.photos.html中的图片数据来源?因为这是一个静态页面所有要有一个 json文件 ...

  3. 使用react-test-renderer/shallow写测试

    我的项目是采用react + ts来写的,项目中要写单元测试,于是采用了Jest库,  主要用的package有 react-test-renderer react-test-renderer/sha ...

  4. kafka-eagle-2.0.5安装指南

    kafka eagle 安装文档 环境介绍 :kafka 三台 版本:2.2.1+cdh6.3.2 管理:ZK kafka-eagle-bin-2.0.5.tar.gz安装包准备 官网 :http:/ ...

  5. FAQ: ansible playbook 中 tasks 与 handlers 的区别

    ansible自动化运维有两种执行方式,一种是对远程主机批量执行命令,使用ansible命令,直接调用模块加参数执行:另一种是对远程主机批量执行脚本,也是调用模块,但是要把参数按照yanl语法写到一个 ...

  6. 2021-7-7 VUE笔记2

    if实例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <scri ...

  7. vs(visual stuiod)中vc++工程的Filter和Folder及vcxproj知识

    vs中创建Filter 在一个新项目中右键 - Add - New,默认只有一选项 New Filter. 创建出来的Filter可以理解为是VS的过滤器(虚拟目录),它不会在本地的磁盘上新建目录,而 ...

  8. C#byte数组获取每一位值

    获取byte中每一位的值 byte byData = 0x36; int n0, n1, n2, n3, n4, n5, n6, n7; n0 = (byData & 0x01) == 0x0 ...

  9. Tarjan基础用法

    \(\operatorname{Tarjan}\) 基础用法 目录 \(\operatorname{Tarjan}\) 基础用法 \(\operatorname{Tarjan}\) 求最近公共祖先 前 ...

  10. 《Linux基础》08. 日志管理 · 备份与恢复

    @ 目录 1:日志管理 1.1:系统常用日志 1.2:日志管理 1.2.1:日志服务 1.2.2:配置文件 1.2.3:自定义日志管理 1.3:日志轮替 1.3.1:轮替服务 1.3.2:配置文件 1 ...