Java中的值传递和引用传递
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。
public class ParamTest {public static void main(String[] args){/*** Test 1: Methods can't modify numeric parameters*/System.out.println("Testing tripleValue:");double percent = 10;System.out.println("Before: percent=" + percent);tripleValue(percent);System.out.println("After: percent=" + percent);/*** Test 2: Methods can change the state of object parameters*/System.out.println("\nTesting tripleSalary:");Employee harry = new Employee("Harry", 50000);System.out.println("Before: salary=" + harry.getSalary());tripleSalary(harry);System.out.println("After: salary=" + harry.getSalary());/*** Test 3: Methods can't attach new objects to object parameters*/System.out.println("\nTesting swap:");Employee a = new Employee("Alice", 70000);Employee b = new Employee("Bob", 60000);System.out.println("Before: a=" + a.getName());System.out.println("Before: b=" + b.getName());swap(a, b);System.out.println("After: a=" + a.getName());System.out.println("After: b=" + b.getName());}private static void swap(Employee x, Employee y) {Employee temp = x;x=y;y=temp;System.out.println("End of method: x=" + x.getName());System.out.println("End of method: y=" + y.getName());}private static void tripleSalary(Employee x) {x.raiseSalary(200);System.out.println("End of method: salary=" + x.getSalary());}private static void tripleValue(double x) {x=3*x;System.out.println("End of Method X= "+x);}
}
输出:Testing tripleValue:
Before: percent=10.0
End of Method X= 30.0
After: percent=10.0Testing tripleSalary:
Before: salary=50000.0
End of method: salary=150000.0
After: salary=150000.0Testing swap:
Before: a=Alice
Before: b=Bob
End of method: x=Bob //可见引用的副本进行了交换
End of method: y=Alice
After: a=Alice //引用本身没有交换
After: b=Bob
相关文章:

ASP.NET网站建设基本常用代码
1.为按钮添加确认对话框Button.Attributes.Add("onclick","return confirm(确认?)");Button.Attributes.Add("onclick","if(confirm(确定?)){return true;}else{return false;}") 2.表格超连接列传递参数<asp:HyperLinkColumn Ta…
C#语言与面向对象技术(6)
本图文主要掌握以下问题: 1.什么是“类型安全”问题? 2.为什么要引入泛型? 3.什么是泛型? 4.泛型是如何实现的? 5.类与类之间存在哪些关系,如何表示?

Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedHookLoadPackage {// handleLoadPackage 会在android加载每一个apk后执行public void handleLoadPackage(Load…

Servlet防止页面被客户端缓存
服务器端的HttpServlet可通过设置特定HTTP响应头来禁止客户端缓存网页,以下示范代码中的response变量引用HttpServletResponse对象: response.addHeader("Pragma","no-cache"); response.setHeader("Cache-Control","…

二进制存储图片
二进制存储图片 如果我们要将一个图片文件二进制于数据库中,那么我们就必须将图片文件转化为二进制数据内容,再将二进制数据存储至数据库中,这是图片存储(或是其它文件数据库存储)的基本原则。 至于要从数据库中读取图…

《HTML5开发手册》——2.4 初学者“菜谱”:使用address元素提供通信信息
本节书摘来自异步社区《HTML5开发手册》一书中的第2章,第2.4节,作者: 【美】Chuck Hudson , 【英】Tom Leadbetter 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.4 初学者“菜谱”:使用address元素提供通信信息 规范中将address…
Matlab与线性代数 -- 矩阵的转置
打磨一项技能最需要的就是耐心,我们知道做一件事情不会一蹴而就,需要长时间的积累。关于Matlab的打磨会持续很长的时间,每天学习一个知识点,一年下来就不得了。要有耐心,要有耐心,跟着我们每天花5分钟的时间…
做为程序员对sql进行的性能优化
今天面试,我简历上写了熟悉sql的性能优化,但是今天面试,一时想不起别的,就仅仅说出了一条,在这里再总结一些,完善自己的知识点。 我经常用的数据库是oracle,所以我的sql优化是程序员针对于orac…

asp.NET自定义服务器控件内部细节系列教程四
如大家要转载,请保留本人的版权:/* *Description:asp.NET自定义服务器控件内部细节系列教程*Auther:崇崇-天真的好蓝 *MSN:chongchong2008msn.com *Dates:2007-05-20*Copyright:ChongChong2008 YiChang HuBei China */四 服务器控件相关元数据Attribute 1.设计期A…

《C++游戏编程入门(第4版)》——1.12 习题
本节书摘来自异步社区出版社《C游戏编程入门(第4版)》一书中的第1章,第1.1节,作者:【美】Michael Dawson(道森),更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.12 习题 C…
Matlab与线性代数 -- 单位矩阵
打磨一项技能最需要的就是耐心,我们知道做一件事情不会一蹴而就,需要长时间的积累。关于Matlab的打磨会持续很长的时间,每天学习一个知识点,一年下来就不得了。要有耐心,要有耐心,跟着我们每天花5分钟的时间…
语句覆盖(Statement coverage)
一、语句覆盖(Statement coverage)“语句覆盖”是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。 图6.4是一个被测试的程序,它的源程序…

RSS原理和实现
RSS是在互联网上被广泛采用的内容包装和投递协议。网络用户可以在客户端借助于支持RSS的新闻工具软件,在不打开网站内容页面的情况下,阅读支持RSS输出的网站内容。 1.RSS文件结构 示例: <?xml version"1.0" encoding"gb23…

consul安装配置使用
2019独角兽企业重金招聘Python工程师标准>>> 环境 centos:7.3 docker:1.12.6 kernel:3.10.0-514.6.1.el7.x86_64 consul:0.8.1 server1:10.1.13.221 server2:10.1.13.222 consul的功能 服务发现 健康检查 支持多数据中心 key/value存储 consul的使用场景 docker实例…
Matlab与线性代数 -- 全1矩阵
打磨一项技能最需要的就是耐心,我们知道做一件事情不会一蹴而就,需要长时间的积累。关于Matlab的打磨会持续很长的时间,每天学习一个知识点,一年下来就不得了。要有耐心,要有耐心,跟着我们每天花5分钟的时间…

java 冒泡排序和快速排序 实现
面试的时候经常会遇到面试官让你直接手写排序算法,下面是冒泡排序和快速排序的实现。冒泡排序基本流程就是,自下而上比较相邻的两个元素进行比较,让大的元素往下面沉,较小的往上冒。按照排序规则进行比较,如果是跟排序…
Matlab与线性代数 -- 零矩阵
打磨一项技能最需要的就是耐心,我们知道做一件事情不会一蹴而就,需要长时间的积累。关于Matlab的打磨会持续很长的时间,每天学习一个知识点,一年下来就不得了。要有耐心,要有耐心,跟着我们每天花5分钟的时间…

全球15个顶级技术类博客
1) 生活骇客(Lifehacker) http://www.lifehacker.com 生活骇客(Lifehacker)的座右铭表达了它的全部理念:“不要为技术而生活,要为生活而关注技术!”这个博客提供了有关于各方各面的“时间节省”…
[ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用添加字体图标
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者:sushengmiyan-------------------------------------------------资源链接--------------------------------------------------------FontAwesome glyph编码:…

正则式高人谈解答正则式的心得
条件1: 长度为14个字符 条件2: 其中任意9个位置为数字,并且数字只能是(0,1,3) 条件3: 其余的位置全部为"-"符号 ------------------------------------------ 求一个正则表达式 答案为:^(?!(.*?-){6,})(?…
数据结构与算法--线性表(顺序表)
本图文主要掌握以下问题: 1. 什么是线性表,线性表有哪些操作? 2. 如何利用顺序结构实现线性表?
Myeclipse在启动tomcat的时候的模式改变
在Myeclipse中, windows->preferences->Myeclipse->Servers->Tomcat 然后找到你的相应的Tomcat服务器的版本 当选择Debug mode的时候,当启动tomcat的时候,会进入debug视图 当选择Run mode的时候,启动tomcat的时候&a…

Request.ServerVariables参数集
Request.ServerVariables("Url") 返回服务器地址 Request.ServerVariables("Path_Info") 客户端提供的路径信息 Request.ServerVariables("Appl_Physical_Path") 与应用程序元数据库路径相应的物理路径 Request.ServerVariables("Path_T…

Linux (x86) Exploit 开发系列教程之十一 Off-By-One 漏洞(基于堆)
Off-By-One 漏洞(基于堆) 译者:飞龙 原文:Off-By-One Vulnerability (Heap Based) 预备条件: Off-By-One 漏洞(基于栈)理解 glibc mallocVM 配置:Fedora 20(x86ÿ…
利用链式存储结构实现线性表
本图文主要介绍了如何利用链式存储结构实现线性表。

自己用的快捷键
win7中 1. Ctrl Shift N —— 创建一个新的文件夹你需要在文件夹窗口中按 Ctrl Shift N 才行,在 Chrome 中是打开隐身窗口的快捷键。2.Win 上/下/左/右 —— 移动当前激活窗口其中,Win 左/右 为移动窗口到屏幕两边,占半屏,Wi…

3月到9月之9月到12月
看看自己这个博客,偶然发现上次的到现在又是半年过去了,这中间发生的太多,可能我天生不爱写东西,呵半年留一次脚印,真不知道我的博客对于博客园来讲算不算资源浪费!常看别人的,但自己没写过&…

Java动态代理机制
在Java的动态代理机制中,有两个重要的类。一个是InvocationHandler,另一个是Proxy。InvocationHandler:每一个动态代理类都必须要实现InvocationHandler接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理…
Matlab与线性代数 -- 魔方矩阵
本图文主要介绍了如何利用Matlab实现魔方矩阵。