解释java是值传递
1.基本类型和引用类型在内存中的保存
Java中只有按值传递 。不管是基本类型还是引用类型, 形参都是实参的一个拷贝 。基本类型copy值,引用类型copy引用--地址;
基本类型的变量保存原始值,即它代表的值就是数值本身;
引用类型的变量保存引用值,"引用值"指向内存空间的地址,代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
2.值传递,引用传递
值传递:是指在调用方法时将实际参数复制一份传递到方法中,这样在方法中如对 参数进行修改,将不会影响到实际参数本身。
引用传递:是指在调用方法时将实际参数的地址直接传递给方法体中,那么在方法体中 对参数所进行的修改,将会印象到实际参数
3.执行
import com.company.desgine.SingleInstance;
import com.company.forTest.Student;import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;public class Main {public static void main(String[] args) {SingleInstance instance = SingleInstance.getInstance();Student a = new Student();Student b = new Student();a.setName("zhangsan");b.setName("lisi");System.out.println(a);System.out.println(b);swap1(a,b);System.out.println(a);System.out.println(b);swap(a,b);System.out.println(a);System.out.println(b);int c =10;int d=20;Integer e =10;Integer f=20;swap(c,d);System.out.println(c);System.out.println(d);swap(e,f);System.out.println(e);System.out.println(f);}private static void swap1(Student e, Student f) {String name = e.getName();e.setName(f.getName());f.setName(name);}private static void swap(Student e, Student f) {Student a= e;e=f;f=a;}private static void swap(int a, int b) {int c =a;a=b;b=c;}private static void swap(Integer a, Integer b) {Integer c =a;a=b;b=c;}
}
结果为:
Student{name='zhangsan'}
Student{name='lisi'}
Student{name='lisi'}
Student{name='zhangsan'}
Student{name='lisi'}
Student{name='zhangsan'}
10
20
10
20
可以发现输出的结果:age值没有因为方法的操作而发生变化,无论是基本的int类型,还是 封装好的Integer类型,都没有改变实际的值。
而执行swp1方法后堆中构造方法所指的值进行了交换,执行完后a和b所指向的地址没有改变,改变的是a和b指向地址所指向的getNama发生了交换。
而三个swp方法无论是引用类型还是基本类型,在其执行期间创建了a和b的形参a‘和b’,他们的值或者所指地址确实发生了交换,但是在方法执行完后,a'和b'出栈,并没有影响到实际a和b的值。因此java是值传递无引用传递
swp1方法前:
栈 堆
swp1方法中:
swp1方法后:
第一个swp方法前:
第一个swp方法中:
第一个swp方法后:
解释java是值传递相关推荐
- 我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种!
作者 l Hollis 来源 l Java之道(ID:javaways) 关于Java中方法间的参数传递到底是怎样的.为什么很多人说Java只有值传递等问题,一直困惑着很多人,甚至我在面试的时候问过很 ...
- java引用传递106_(转载)java的值传递与引用传递
1 说明:本文的适用对象为java初学者.如果有读者发现文章中有叙述不妥之处,请指正.2 3 今天在论坛上有人提了一个关于java中调用函数时有没有引用传递的问题,可谓是吵的不可开交.有人说java只 ...
- java对象引用出错_“Java有值传递和引用传递”为什么错了?
前言 初学Java的时候,老师在课堂上说"Java有值传递和引用传递",但网上"Java只有值传递"的呼声很高. 本人在查找资料的过程中,在这两个说法之间反复横 ...
- 当面试官问我————Java是值传递还是引用传递?
面试官:你好,你能说出下面个程序的执行结果吗? public class Test {public static void main(String[] args) {String name = &qu ...
- 这一次,彻底解决Java的值传递和引用传递
本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨 ...
- Java is Pass-by-Value, Dammit! 我靠!Java就是值传递!
Java is Pass-by-Value, Dammit! 我靠!Java就是值传递! 原文地址:http://javadude.com/articles/passbyvalue.htm 关键点 形 ...
- Java 是值传递还是引用传递
最近整理面试题,整理到值传递.引用传递,到网上搜了一圈,争议很大.带着一脸蒙圈,线上线下查了好多资料.最终有所收获,所以分享给大家,希望能对你有所帮助. 首先说下我的感受,这个题目出的很好,但 ...
- java包装和引用_回顾值传递和引用传递关于Java是值传递还是引用传递,网上有不一样的说法。1、基本类型或基本类型的包装类以及String是值传递,引用类型是引用传递。2...
回顾值传递和引用传递 关于Java是值传递还是引用传递,网上有不一样的说法. 1.基本类型或基本类型的包装类以及String是值传递,引用类型是引用传递. 2.Java中只有值传递. 关于这个问题应该 ...
- java 引用传递_详解java的值传递、地址传递、引用传递
详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...
最新文章
- 分享一个SQLite 性能优化实例
- C 语言编程 — 结构体的数据类型转换
- 通过spark-submit,本地测试SparkStreaming
- AI Boot Camp 分享之 ML.NET 机器学习指南
- php 获取对象所有成员变量,PHP成员变量获取对比
- Mac Redis安装入门教程
- Java基础---方法的重载(overload)+ 优先向上匹配原则
- 多线程十 Timer
- 文字阴影(HTML、CSS)
- 个别省通知!研究生推迟开学不停学!毕业答辩可采用远程视频方式
- C#设计模式之十八状态模式(State Pattern)【行为型】
- FT5X06 如何应用在10寸电容屏
- python for a,b in c
- 读书笔记-Java完全自学手册
- 全迹科技化工人员定位系统助推裕泰化工集团安全管理智能升级
- mysql数据库工资管理系统_数据库课程设计—企业工资管理系统(java版完整代码).doc...
- 小程序云开发实战一:小程序扫一扫获取到图书ISBN码(图书条形码)
- 自定义ViewGroup——自定义布局
- HR模块-组织信息类型创建-PP01
- java 构造方法 继承_java-继承/构造方法?
热门文章
- 东北石油大学计算机与信息技术学院 马瑞民 联系方式,东北石油大学教学名师...
- 时区 java 巴黎_java中的时区陷阱 - iasuna
- 深圳3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型
- zabbix-4.0.3添加监控主机
- kline graph
- KBEngine服务端源码分析笔记
- (2)ARC之@property使用 转自易飞扬 内容有改动
- 27.蓝桥杯之漏掉的账目明细
- 在超算平台运行matlab程序
- instagram akp_如何从您的Instagram帐户中删除帖子