有关java调用方法参数传递的分析
这个问题好多文章都讲过了,在此本人补充一下,加深理解,有不足之处请指教。
相信做java开发同学们都知道,调用方法传递参数时,不论是基本类还是引用类型,
java都是值传递,不存在引用传递(称引用传递,只是便于理解,不过看到我下面的例子,就要注意了)。
先看这里例子:预期输出结果是什么?
|
public class Test4 class Domain |
<br>
实际输出结果:
调用chenge方法之前:name=test01
调用chenge方法之后:name=test02
调用chenge2方法之前:name=www01
调用chenge2方法之后:name=www01
-------------------------------------------------------------------------------------
分析:
代码中方法chenge和chenge2都是应用类型作为入参的;
对于调用方法chenge的结果很好理解;对于调用方法chenge2就要好好分析了。
因为:java中调用方法时的入参都是值传递(不管是基本类型还是引用类型)
所谓的值传递,按照jdk的介绍,本质是变量名的拷贝被传到方法中,比如 基本类型变量、引用类型变量,在传递到方法中时,
都是该变量的一个拷贝。基本类型的值都保存在栈用中(实际栈的值是共享的),调用方法后不会影响原来的值。
(1)针对例子中的chenge方法:chenge(domain); 这里的变量domain会有一个拷贝传到chenge方法体内,这个拷贝变量同样与domain指向之前的对象。
方法chenge中的 domain.setName("test02") 语句,实际修改的是拷贝变量指向的对象,由于变量domain与拷贝变量同时指向一个对象,
变相的修改了domain的指向对象。
因此打印结果为:
调用chenge方法之前:name=test01
调用chenge方法之后:name=test02
(2)由(1)的分析,就好理解chenge2方法了。
chenge2方法是将拷贝变量指向了另一个新的对象,不影响原来的对象,
因此打印结果为:
调用chenge2方法之前:name=www01
调用chenge2方法之后:name=www01
有关java调用方法参数传递的分析的更多相关文章
- Java split方法源码分析
Java split方法源码分析 public String[] split(CharSequence input [, int limit]) { int index = 0; // 指针 bool ...
- Java调用方法参数究竟是传值还是传址?
之前阅读<Head First Java>的时候,记得里面有提到过,Java在调用方法,传递参数的时候,采用的是pass-by-copy的方法,传递一份内容的拷贝,即传值.举一个最简单的例 ...
- java关于方法参数传递的相关问题讨论
我们知道,java中定义变量的目的有两个: 1.防止被垃圾回收机制回收,毕竟如果没有明确指向真实物理内存的'代号'很大可能会被java垃圾回收机制当作垃圾回收. 2.便于引用,方便处理. packag ...
- Selenium Grid的Java调用方法
java -jar selenium-server-standalone-.jar -role hub explorer http://192.168.1.173:4444/grid/console ...
- 新手容易混乱的String+和StringBuffer,以及Java的方法参数传递方式。
之前在交流群里和猿友们讨论string+和stringbuffer哪个速度快以及Java的方法参数传递的问题,引起了群里猿友的小讨论.最终LZ得出的结果是string+没有stringbuffer快, ...
- JAVA调用阿里云短信接口
官方文档:https://help.aliyun.com/document_detail/101414.html?spm=a2c4g.11186623.6.626.2cef6220yxh5l7 jar ...
- java中方法的参数传递机制
问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个 ...
- 【Java基础】12、java中方法的参数传递机制
问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个 ...
- java 调用webservice的各种方法总结
java 调用webservice的各种方法总结 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 方法一:创建基于JAX-WS的webservice(包括 ...
随机推荐
- ASP.NET 打包多CSS或JS文件以加快页面加载速度的Handler
ASP.NET 打包多CSS或JS文件以加快页面加载速度的Handler, 使用<link type="text/css" rel="Stylesheet" ...
- Linux安装pear包
一.安装pear包. 1.安装: $ sudo wget http://pear.php.net/go-pear.phar $ sudo php go-pear.har 2.查看pear下安装的包: ...
- 查看postgre都有哪些语句占用CPU,以及对应的sql语句
查看占用CPU最多的几个postgresql ps aux | grep postgres | sort -n -r -k | head - | awk '{print $2, $3}' 查看所有po ...
- httpclient Accept-Encoding 乱码
解决方法 HttpEntity httpEntity = httpResponse.getEntity(); if (httpEntity != null) { if (httpEntity.getC ...
- 海南小地图(echart)
先看效果 这个是海南省地图: 然后看引入的html: <body class=""> <div class="container"> & ...
- Python学习笔记五:错误与异常
一:常见异常与错误 BaseException 所有异常的基类SystemExit 解释器请求退出KeyboardInterrupt 用户中断执行(通常是输入^C)Exception 常规错误的基类S ...
- Java中String、StringBuffer和StringBuilder的区别
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6581009.html 在编程中,对于字符串拼接,我们可以用String类重载的+或concat(str).S ...
- 使用 git post-receive 钩子部署服务端代码
在 git 中提交服务器源码的时候,如果能够直接更新到测试服务器,并且重启服务使其生效,会节省懒惰的程序员们大量的时间. git 的 Server-side hook (服务端钩子/挂钩)可以用来做件 ...
- 写带有清晰图片的博客:如何将word中的图片复制到windows live writer保持大小不变--清晰度不变
写blog的习惯,先在word写了,复制到windows live writer,再发布到博客园.word中的文章,图片有缩放比例,复制到windows live writer后图片变得不清晰.除了一 ...
- python之模块datetime 常见操作
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块datetime #http://blog.sina.com.cn/s/blog_6c37 ...