Java中的值传递、引用传递

对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己。——《Java编程思想》

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。

不要纠结于 Pass By ValuePass By Reference 的字面上的意义,否则很容易陷入所谓的 “一切传引用其实本质上是传值” 这种并不能解决问题无意义论战中。

Java中只有传值调用,没有传址调用。所以在Java方法中改变参数的值是行不通的。但是可以改变引用变量的属性值。

仔细理解一下下面几句话:

1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。
2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。
3、方法体内对参数进行运算,不影响原有变量的值。
4、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。

来做一个测试:

public class Main {public static void main(String[] args) {Animal dog = new Animal(10, "Yellow");System.out.println(dog);change(dog);System.out.println(dog);}static void change(Animal a) {a.weight = 100;a.color = "Red";}
}class Animal {int weight;String color;public Animal(int weight, String color) {this.weight = weight;this.color = color;}@Overridepublic String toString() {return "Animal [weight=" + weight + ", color=" + color + "]";}
}

输出

Animal [weight=10, color=Yellow]
Animal [weight=100, color=Red]

一张图解释:对象在内存中的存储方式

对象数组的内存解析

【Java基础】Java中的值传递、引用传递相关推荐

  1. java中是值传递引用传递_Java是按值传递而不是按引用传递

    java中是值传递引用传递 One of the biggest confusion in Java programming language is whether java is Pass by V ...

  2. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  3. Java基础-Java中常用的锁机制与使用

    Java基础-Java中常用的锁机制与使用 锁lock或互斥mutex是一种同步机制,主要用于在存在多线程的环境中强制对资源进行访问限制.锁的主要作用为强制实施互斥排他以及并发控制策略.锁一般需要硬件 ...

  4. [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别

    [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别 Read 读入方法 read(): 一般是这种形式 public int read() 1.从流数据中读取的 ...

  5. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...

  6. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...

  7. Java基础----Java编程语言概述

    Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...

  8. JAVA基础--JAVA SE(知识点总结 Ⅴ )

    前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...

  9. Java基础——Java多继承的三种实现方式

    Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...

  10. 你真的了解C#中的值和引用吗?(上)

    术语解释 在阅读本文之前,你需要了解以下这几个术语是不同的:值.引用.值类型.引用类型. C#中有三种值(value),分别是值类型实例的值.引用类型实例的值和引用. 值类型表达式的值是数据本身. 引 ...

最新文章

  1. 机器学习-特征工程中的数据预处理
  2. python教材目录_Python实用教程/高等院校信息技术规划教材简介,目录书摘
  3. 【caffe-Windows】以mnist为例的hdf5单标签处理——matlab实现
  4. 互联网公司面试必备综合篇
  5. 【转】将QT开发的界面程序封装成DLL,在VC中成功调用
  6. android 重复申请权限,去除AndroidManifest.xml里重复申请的权限(uses-permission)
  7. 获取ul下li标签里点击的是哪一个li并获取li里a标签的值
  8. 3811.排列-AcWing题库
  9. SpringBoot配置redis
  10. 知识图谱_数据挖掘主要技术
  11. 选择图片未经后端显示预览图片
  12. 写个单机版斗地主程序,复习c++面向对象
  13. Python实现身份证号码合法性校验
  14. 如何在Python中使用Rest API
  15. Tensorflow1.7+cuda9.0+cudnn7.0中的各种意(da)外(keng)
  16. ngx_lua常用变量参数
  17. 移动应用专项测试的思路和方法
  18. php发邮件附件,PHP使用PHPMailer发送邮件和附件的方法
  19. Java、JSP实验室预约管理系统
  20. 磁盘阵列技术RAID

热门文章

  1. python输入一组数字存到列表_Python如何使用输入传递多个值并将它们存储在一个列表中(简单版本),python,怎么,input,传入,储存,到...
  2. TensorRT安装教程
  3. Python数据库的连接
  4. 进程间通信 - 匿名管道实现
  5. Python从N个数中找到最大的K个数
  6. kafka数据可靠性深度解读
  7. 【免费报名】与阿里云一同探索视频云的新技术与新场景
  8. 视频会议未来趋势不完全预测
  9. VIPKID 张武锋:自研RTC的故事
  10. RTP之H264封包和解包