1、基本类型传值,对象类型传地址

按值传递:当将一个参数传递给一个方法时,方法接收的是原始值的一个副本。因此,如果方法修改了该参数,仅改变副本,而原始值保持不变。

按引用传递:当将一个参数传递给一个方法时,方法接收的是原始值的内存地址,而不是值的副本。因此,如果方法修改了该参数,调用代码中的原始值也随之改变。

“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

2、验证基本类型传值

/**
* 基本类型传值
* @author Thanlon
*/
public class PassValAndAddr {
  public void testMethod(int a) {
    a = 5;//对传过来的a赋予新值
    System.out.println("testMethod方法中:a=" + a);
  }

  public static void main(String[] args) {
    PassValAndAddr passValAndAddr = new PassValAndAddr();
    int a = 3;
    passValAndAddr.testMethod(a);
    System.out.println("main方法中:a=" + a);
  }
}

控制台打印:

testMethod方法中:a=5
main方法中:a=3

在接收参数的方法中修改了传递过来的值,但这个值只是原始值的副本,原始值不会发生改变。

3、验证对象类型传地址

PassValAndAddr2 .java:

/**
* 对象类型传递地址
* @author Thanlon
*/
public class PassValAndAddr2 {
  public void passAddr(ObjectA a) {
    a.age = 22;
    System.out.println("传递对象给passAddr方法,对象的age属性值为:" + a.age);
  }

  public static void main(String[] args) {
    PassValAndAddr2 passValAndAddr = new PassValAndAddr2();
    ObjectA objectA = new ObjectA();
    passValAndAddr.passAddr(objectA);
    System.out.println("objectA原始的age值为:" + objectA.age);
  }
}

PassValAndAddr2 .java:

public class ObjectA {
  public int age = 0;
}

控制台打印:

传递对象给passAddr方法,对象的age属性值为:22
objectA原始的age值为:22

在接收参数的方法中修改了传过来的对象的age属性,原来对象的age属性值发生了改变,说明方法接收的是原始值的内存地址,而不是值的副本。

注意:在Java中只有基本类型和按照下面这种定义方式的String类型数据是按值传递,其它的都是按引用传递。

直接使用双引号定义字符串方式:String str = "Java"

转载于:https://www.cnblogs.com/qikeyishu/p/10265490.html

Java中的参数传递 --Java相关推荐

  1. Java 中的参数传递和引用类型

    本文主要分三部分介绍 Java 中的值.指针与引用的概念. 第一部分从编程语言的三种参数传递方式入手,阐释"为什么 Java 中只有值传递". 第二部分排除自动装箱和自动拆箱的干扰 ...

  2. Java中的参数传递,到底是值传递还是引用传递?

    文章内容为转载,转载自公众号Hollis关于我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种! 原文链接:我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种! 知乎回答链接:Java 到 ...

  3. Java中的参数传递

    Java中的参数传递:分为值传递和引用传递 但本质上,Java中只有值传递.引用传递,其实可以理解为传的是类似指针的东西. 值传递就是把基本变量的值拷贝一份,传递这个拷贝.引用传递则是传递的引用的地址 ...

  4. java中的参数传递(只有值传递没有引用传递)

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递).所以在java方法中改变参数的值是不会改变原变量的值的,但为什么改变引用变量的属性值却可以呢?请看下面的解答. java中的数据类 ...

  5. Java中的记录器 - Java日志示例

    Java中的记录器 - Java日志示例 今天我们将研究Java中的Logger.Java Logger提供了java编程的日志记录. 目录[ 隐藏 ] 1 Java中的记录器 1.1 Java Lo ...

  6. Java中的正则表达式 - Java Regex示例

    Java中的正则表达式 - Java Regex示例 欢迎使用Java中的正则表达式.它在Java中也称为Regex.当我开始编程时,java正则表达式对我来说是一场噩梦.本教程旨在帮助您掌握Java ...

  7. java中 数组声明,java数组声明格式

    java 声明动态数组,java对象数组详解,java中声明数组,java数组声明格式 Java 中数组的声明一维数组的声明: 在 Java 中,数组是独立的对象,有自身的方法,不是变量的集合. 数组 ...

  8. Java中apple导入那个包_在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是()。A.java.appletB.java.awtC.j...

    在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是().A.java.appletB.java.awtC.j 更多相关问题 问卷星是一个专业.无限制的免费在线问卷调查.测评. ...

  9. java中properties作用,java中Properties类的使用

    java中Properties类的使用 在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件). Propert ...

最新文章

  1. 在malloc函数中为什么常用sizeof来设定内存分配的大小?
  2. WPF 3D中多个模型如何设置某一个在最前?
  3. “http://127.0.0.1:8888' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header”
  4. loadrunner脚本练习
  5. 07.德国博士练习_09_agg_query
  6. java获取返回xml节点里的值,关于用java读取xml中节点的值解决方案
  7. WCF读取配置动态生成客户端对象
  8. Spring异常重试机制 - Spring Retry
  9. 如何解决Django与Vue语法的冲突
  10. 第二章 python自定义函数与类(一)
  11. 脑机接口五大应用场景
  12. 世界第4疯狂的科学家,在103岁生日那天去世了
  13. 小白重装系统步骤总结
  14. 用户名修改后进入不了计算机,更改计算机用户名后不能登录到桌面怎么办?
  15. Wed Aug 03 19:48:03 +0800 2022这种字符串,怎么转成时间格式年月日
  16. ubuntu搭建php运行环境
  17. 软件配置---重装系统---品牌电脑重启快捷键表
  18. weui popup的使用
  19. 企业数字化转型--银行数字化转型的战略设计与技术管理
  20. Item 2: Understand auto type deduction.

热门文章

  1. idea GsonFormat插件使用报错 StringIndexOutOfBoundsException: begin 0, end -1, length 9
  2. k8s secret使用方式:pod通过变量和volume方式使用secret
  3. 阿里巴巴Java开发规约插件p3c
  4. Python3序列解包
  5. Hystrix熔断器功能测试示例数据
  6. python 异常函数调用栈_Python捕获异常堆栈信息的几种方法
  7. vb中mschart利用数组作图_选考VB算法解析之2019年4月高考真题卷第17题
  8. 华硕路由 ac ax_WiFi 6 路由好在哪里,看看华硕AX路由推荐清单吧
  9. 电脑硬件检测_好用的电脑硬件型号有哪些_江西南昌顺同谦科技|电脑||笔记本|...
  10. mysql 上级组织参数值_MySQL参数group_replication_consistency说明