java是值传递还是引用传递
首先写一个简便的Employee,以便测试使用。
class Employee {
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第一次测试:
然后写一个函数,传入一个Emplyee对象,修改name,如果函数执行完毕原来的employee的name值发生变化,按照我们的理解,会认为是引用传递。
public static void main(String[] args) {
Employee a = new Employee("Alice");
Employee b = new Employee("Bob");
changeName(a);
System.out.println(a.getName());
System.out.println(b.getName());
}
public static void changeName(Employee x) {
x.setName("fly");
}
执行结果:
fly
Bob
第二次测试:
但是还有一个测试用例,交换两个对象。如果是引用传递,函数执行结束后,两个对象的名字会发生交换。现在来试一下。
public static void main(String[] args) {
Employee a = new Employee("Alice");
Employee b = new Employee("Bob");
swap(a, b);
System.out.println(a.getName());
System.out.println(b.getName());
}
public static void swap(Employee x, Employee y)
{
Employee t = x;
x = y;
y = t;
}
执行结果:
Alice
Bob
然而他们并没有发生任何变化。什么情况?!又变成值传递了吗?
最后的答案确实是值传递。第一个例子中让大家感觉是引用传递的原因是:传入函数的值是对象引用的拷贝。(用c语言的说法是指针的拷贝,也就是说地址的拷贝。)
第三次测试:
这个时候我们再写最后一个例子,在swap函数里修改x的name值。
public static void swap(Employee x, Employee y)
{
Employee t = x;
x = y;
y = t;
x.setName("joyce");
}
执行结果:
Alice
joyce
看,x交换后的引用是b的,所以修改x后,b会发生变化。
第二次测试因为没有发生修改,函数结束后就什么都没了,毕竟只是引用的拷贝嘛~
java是值传递,值是对象引用的拷贝。
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语言那样拥有指针,在看到引用传递和值传递很多的解释之后,更相信引用传递和值传递归根到底都是值传递,只不过引用传递的时候看上去很高大上,其实是把变量 ...
随机推荐
- MVC原理
C代表Controller,负责用户界面和业务逻辑层的通信控制,一方面解释来自用户界面的输入,识别用户动作(如点击按钮等),调用相应Model中的方法, 另一方面处理来自Model的事件和返回的 ...
- 微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html
微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html 友情提示: 大家 ...
- ansible 安装
1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署. ...
- GDB调试32位汇编堆栈分析
GDB调试32位汇编堆栈分析 测试源代码 #include <stdio.h> int g(int x){ return x+5; } int f(int x){ return g(x)+ ...
- css 居中问题
水平居中有text-align:center 和 margin:0 auto,前者是针对父元素进行设置而后者则是对子元素.margin:0 auto; 这里实现的前提是子元素没有float 浮动起来, ...
- Actor模型前奏
软件系统从观察者模式到事件驱动然后再到消息驱动,经过了不断的抽象.当软件通过消息来交互的时候再没有了直接引用,没有了耦合,所有的一切都变成了异步和并行
- hive --service metastore 出现的问题
Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083 执行命令jps root@hadoopm:/usr# jps1763 Res ...
- 什么是ValueStack
转载自:http://www.cnblogs.com/zyw-205520/archive/2012/09/12/2681346.html Strut2的Action类通过属性可以获得所有相关的值,如 ...
- Hibernate操作指南-搭建一个简单的示例(基于原生API和注解)
- 【翻译】如何给tomcat配置memcached-session-manager
原文在这 ,其实不是忠实翻译,就是按照自己理解记录一下 第一步,下载所需的jar包 下载 memcached-session-manager-x.y.z.jar, memcached-session- ...