java对象引用传递和值传递的一些总结
2024-09-28 09:34:36
1.对象作为函数的参数传递过去的时候,是以原对象的引用的方式传递的,更改参数对象的值,会影响原来的对象。 2.对象作为函数的返回值的时候,传递过来的也是一个引用传递,更改传递过来的对象的时候,会影响原来的对象 3.对象A给另一个对象B赋值的时候(无论B是否经过了new 开辟新空间),此时的B是对A对象的一个引用,更改B会影响A 4.唯一的不是引用传递的方式是: 使用 基本数据类型赋值的方式,来对对象进行拷贝比如上例中的最后一种方式。这样出现的对象是一个新对象,不是原始对象的引用 补充: 1. java中的String类型虽然也为一个对象,但是在赋值传递的时候,走的是值传递的路线,和一般数据类型是同样的。String为一个特例。 总结: 对象的传递过程中, 基本上都是以引用传递来进行的,唯一的非引用传递的方法是: 自己开辟新的对象空间后,使用基本数据类型赋值方法(也可以自己实现一个copy复制函数)。
附上测试代码和结果:
String str = new String("abc");
char[] ch = {'a','b','c'}; Log.d("levin", str+"\n");
Log.d("levin", String.valueOf(ch)); change(str,ch); System.out.print("\n");
Log.d("levin", str+"\n");
Log.d("levin", String.valueOf(ch)); Person person = new Person();
person.name = "bill";
person.age = 10;
changePerson(person);
Log.d("levin", person.name+"\n");
Log.d("levin", String.valueOf(person.age));
public void changePerson(Person person){
person.name = "Jobs";
person.age = 50;
}
06-07 12:33:57.178: D/levin(8091): abc 06-07 12:33:57.578: D/levin(8091): abc 06-07 12:33:58.548: D/levin(8091): abc 06-07 12:33:58.988: D/levin(8091): gbc 06-07 12:34:00.158: D/levin(8091): Jobs 06-07 12:34:00.418: D/levin(8091): 50
最新文章
- Unknown lifecycle phase ";mvn";. You must specify a valid lifecycle phase or a goal in the format <;plugin-prefix>;:<;goal>; or <;plugin-group-id>;:<;plugin-artifact-id>;[:<;plugin-version>;]:<;goal>;
- CentOS/Redhat VNC 服务
- setInterval小问题
- leetcode 154. Find Minimum in Rotated Sorted Array II --------- java
- spring3.2.2+mybatis3.2.3+c3p0项目整合
- iOS开发之静态库.a的制作教程
- TCP与UDP网络编程总结(一)
- angular router ui bug !
- web前端CSS2学习2017.6.17
- Entity Framework Core 2.0 新特性
- 关于mysql保存数据的时候报问题分析 普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utstring value:&#39;\xF0\x9F\x98\x82\xF0\x9F...&#39; for ...
- 【c#】RabbitMQ学习文档(四)Routing(路由)
- maven-compiler-plugin报错
- prufer编码
- linux下混杂模式
- Shell - 简明Shell入门06 - 循环语句(Loop)
- 小组冲刺第十四天站立会议(Beta版发布)
- laravel 单元测试设置模拟时间
- Linux 系统结构详解【转】
- uva-10054-欧拉回路
热门文章
- Android ListView两种长按弹出菜单方式
- 【 D3.js 入门系列 — 1 】 第一个程序 HelloWorld
- FileDescriptor
- Codeforces 510B Fox And Two Dots 【DFS】
- Raphael Js矢量库API简介:
- 网页制作之JavaScript部分3--事件及事件传输方式(函数调用 练习题 )重要---持续更新中
- tomcat启动后ids页面无法访问
- 14-UIKit(拖拽手势、布局)
- Qt 富文本处理(QTextDocument和QTextBlock和QTextFrame和QTextTable和QTextList和QTextDocument)
- RESTful最佳实践之基于 jersey 的增删改查