【Java基础】Java中的值传递、引用传递
Java中的值传递、引用传递
对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己。——《Java编程思想》
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。
不要纠结于 Pass By Value
和 Pass 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中的值传递、引用传递相关推荐
- java中是值传递引用传递_Java是按值传递而不是按引用传递
java中是值传递引用传递 One of the biggest confusion in Java programming language is whether java is Pass by V ...
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- Java基础-Java中常用的锁机制与使用
Java基础-Java中常用的锁机制与使用 锁lock或互斥mutex是一种同步机制,主要用于在存在多线程的环境中强制对资源进行访问限制.锁的主要作用为强制实施互斥排他以及并发控制策略.锁一般需要硬件 ...
- [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别
[重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别 Read 读入方法 read(): 一般是这种形式 public int read() 1.从流数据中读取的 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...
- Java基础----Java编程语言概述
Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...
- JAVA基础--JAVA SE(知识点总结 Ⅴ )
前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...
- Java基础——Java多继承的三种实现方式
Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...
- 你真的了解C#中的值和引用吗?(上)
术语解释 在阅读本文之前,你需要了解以下这几个术语是不同的:值.引用.值类型.引用类型. C#中有三种值(value),分别是值类型实例的值.引用类型实例的值和引用. 值类型表达式的值是数据本身. 引 ...
最新文章
- 机器学习-特征工程中的数据预处理
- python教材目录_Python实用教程/高等院校信息技术规划教材简介,目录书摘
- 【caffe-Windows】以mnist为例的hdf5单标签处理——matlab实现
- 互联网公司面试必备综合篇
- 【转】将QT开发的界面程序封装成DLL,在VC中成功调用
- android 重复申请权限,去除AndroidManifest.xml里重复申请的权限(uses-permission)
- 获取ul下li标签里点击的是哪一个li并获取li里a标签的值
- 3811.排列-AcWing题库
- SpringBoot配置redis
- 知识图谱_数据挖掘主要技术
- 选择图片未经后端显示预览图片
- 写个单机版斗地主程序,复习c++面向对象
- Python实现身份证号码合法性校验
- 如何在Python中使用Rest API
- Tensorflow1.7+cuda9.0+cudnn7.0中的各种意(da)外(keng)
- ngx_lua常用变量参数
- 移动应用专项测试的思路和方法
- php发邮件附件,PHP使用PHPMailer发送邮件和附件的方法
- Java、JSP实验室预约管理系统
- 磁盘阵列技术RAID