java是值传递,还是引用传递?
java到底是值传递,还是引用传递?以前国内的java开发者有过很多争论,由于《Practical java》等书籍的引入,现在大家都知道java是严格的值传递,基本数据类型不会有什么问题,但是针对对象和数组,执行的结果,似乎应该是引用传递。
在《Practical java》中,给出了说明,针对对象和数组,事实上,传递的内容,是引用的值,而不是引用本身。但是怎么验证,网上没有例子,书上也没有给,现在给出一个 例子,可以很好的说明,java确实是值传递。例子如下:
- public class Test{
- public void c(Model m1, Model m2){
- Model m = m1;
- m1 = m2;
- m2 = m;
- }
- public void cd(int[] a, int[] b){
- int[] c = a;
- a = b;
- b =c;
- }
- public static void main(String[] args){
- Model m1 = new Model();
- m1.setName("m1");
- Model m2 = new Model();
- m2.setName("m2");
- Test app = new Test();
- app.c(m1, m2);
- System.out.println(m1.getName()+"---" + m2.getName());
- int[] a = new int[]{1};
- int[] b = new int[]{2};
- app.cd(a, b);
- System.out.println(a[0] + "----" + b[0]);
- }
- }
- class Model{
- private String name;
- public void setName(String name){
- this.name = name;
- }
- public String getName(){
- return name;
- }
- }
打印的结果是
- D:/ > java Test
- m1---m2
- 1----2
这是因为,m1和m2本身是对象的引用没错,但是传入方法c的参数,实际上是m1和m2的副本,因此只是两个副本进行了交换,而m1和m2本身并没有被交 换。交换数组的方法cd,原理与之相同。
java是值传递,还是引用传递?的更多相关文章
- Java中引用类型变量,对象,值类型,值传递,引用传递 区别与定义
一.Java中什么叫做引用类型变量?引用:就是按内存地址查询 比如:String s = new String();这个其实是在栈内存里分配一块内存空间为s,在堆内存里new了一个Stri ...
- java中值传递和引用传递
最近工作中使用到了值传递和引用传递,但是有点懵,现在看了下面的文章后清晰多了.一下是文章(网摘) 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...
- Java中的值传递和引用传递
这几天一直再纠结这个问题,今天看了这篇文章有点思路了,这跟C++里函数参数为引用.指针还是有很大区别. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里 ...
- java的值传递和引用传递
昨天博主在对于值传递和引用传递这里栽了一个大坑啊,导致一下午时间都浪费在这里,我们先说下值传递和引用传递java官方解释: 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对 ...
- java中方法的参数传递机制(值传递还是引用传递)
看到一个java面试题: 问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参 ...
- java 对象传递 是 值传递 还是 引用传递?
这个问题说实话我感觉没有太大的意义. 按第一印象和c++的一些思想去理解的话对象传递是引用传递,因为传递过去的对象的值能被改变. 但是又有很多人,不知道从哪里扣出来一句,java中只有值传递,没有引用 ...
- java参数传递时到底是值传递还是引用传递
java参数传递时到底是值传递还是引用传递(baidu搜集) 问”,很多人的BLOG里都引用这些面试题,最近因为工作内容比较枯燥,也来看看这些试题以调节一下口味,其中有一道题让我很费解. 原题是:当一 ...
- Java面向对象-方法的值传递和引用传递
Java面向对象-方法的值传递和引用传递 0 发布时间:『 2016-08-21 14:21』 博客类别:Java核心基础 阅读(197) 评论(0) Java面向对象-方法的值传递和引用传递 方 ...
- Does Java pass by reference or pass by value?(Java是值传递还是引用传递) - 总结
这个话题一直是Java程序员的一个热议话题,争论不断,但是不论是你百度搜也好还是去看官方的文档中所标明的也好,得到的都只有一个结论:Java只有值传递. 在这里就不贴代码细致解释了,让我们来看看一些论 ...
- Java值传递和引用传递
Java总是在讨论是传递还是引用传递,Java没有像C语言那样拥有指针,在看到引用传递和值传递很多的解释之后,更相信引用传递和值传递归根到底都是值传递,只不过引用传递的时候看上去很高大上,其实是把变量 ...
随机推荐
- 【第三课】kaggle案例分析三
Evernote Export 比赛题目介绍 TalkingData是中国最大的第三方移动数据平台,移动设备用户日常的选择和行为用户画像.目前,TalkingData正在寻求每天在中国活跃的5亿移动设 ...
- WERTYU(WERTYU, UVa10082)
把手放在键盘上时,稍不注意就会往右错一 位.这样,输入Q会变成输入W,输入J会变成输 入K等.键盘如图所示. 输入一个错位后敲出的字符串(所有字母均大写),输出打字员本来想打出的句子.输入保 证合法, ...
- Centos7下的有多个版本的tomcat部署项目并访问
在tomcat下部署项目,第一次访问成功.但是发现有一个页面没有成功加载,发现是部署时少了一些东西.也不想去找出具体少了什么,直接把原来的项目移除,重新加载项目.重启tomcat,这时惊喜来了. 重启 ...
- 08.Web服务器-4.Web服务器动态资源请求
1 浏览器请求动态页面过程 2 WSGI 怎么在你刚建立的Web服务器上运行一个Django应用和Flask应用,如何不做任何改变而适应不同的web架构呢? 在以前,选择 Python web 架构会 ...
- HDU - 2833 - WuKong
先上题目: WuKong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- @Transactional 注解的使用和注意
转载:http://epine.itpub.net/post/8159/526281 1. 在需要事务管理的地方加@Transactional 注解.@Transactional 注解可以被应用于接口 ...
- 洛谷——P1002 过河卒||codevs——T1010 过河卒
https://www.luogu.org/problem/show?pid=1002#sub||http://codevs.cn/problem/1010/ 题目描述 棋盘上A点有一个过河卒,需要走 ...
- javascript推断浏览器类型
<script> window["MzBrowser"]={};(function() { if(MzBrowser.platform) return; var ua ...
- sikuli_ide打开提示没有对应的javaw
对于sikuli,需要安装32位的jdk且不能高于1.7的版本 对于64位系统的C盘,Program Files文件夹是64位的,Program File(x86)文件夹是32位的 需要安装一个32位 ...
- c16---字符串
// // main.c // 字符串的基本概念,字符串和字符数组的共用的char[], #include <stdio.h> int main(int argc, const char ...