先上代码:

 import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 引用传递demo
* @author lishaohua
* time : 2016-3-24 下午5:10:49
*/
public class Demo1 {
private static Logger logger = LoggerFactory.getLogger(Demo1.class); //设置属性...
public void setStudentParams(Student stu) {
stu.setName("张三");
stu.setStuNo("0001");
} /**
* 测试...
* @param args
*/
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
Student stu = new Student("0000", "李四");
logger.info("更新前------>" + stu.toString());
demo1.setStudentParams(stu);
logger.info("更新后------>" + stu.toString());
} } /**
* 辅助类:学生类
*
* @author lishaohua
* time : 2016-3-24 下午5:13:58
*/
class Student { private String stuNo; //学号 private String name; //姓名 //默认构造
public Student() {} //构造方法
Student(String stuNo, String name) {
super();
this.stuNo = stuNo;
this.name = name;
} public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
} public String getStuNo() {
return stuNo;
} public void setStuNo(String stuNo) {
this.stuNo = stuNo;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }

执行

17:43:26.593 [main] INFO  c.s.masopen.integration.demo.Demo1 - 更新前------>Student[stuNo=0000,name=李四]
17:43:26.598 [main] INFO c.s.masopen.integration.demo.Demo1 - 更新后------>Student[stuNo=0001,name=张三]

解析:

Student stu = new Student("0000", "李四");
logger.info("更新后------>" + stu.toString());
demo1.setStudentParams(stu);
logger.info("更新后------>" + stu.toString());

第一行创建了1个对象stu:   Student stu = new Student("0000", "李四");

第二行打印该对象信息:      更新前------>Student[stuNo=0000,name=李四]

第三行重新设置该对象属性:

第四行打印对象信息:         更新后------>Student[stuNo=0001,name=张三]

为了说明问题,我们现在对代码做更改:

更改地方1:

    //设置属性...
public void setStudentParams(Student stu) {
stu = new Student();
stu.setName("张三");
stu.setStuNo("0001");
}

很简单:设置属性的方法中,我们对传递过来的对象重新new了一把。

重新运行:

 17:45:08.330 [main] INFO  c.s.masopen.integration.demo.Demo1 - 更新前------>Student[stuNo=0000,name=李四]
17:45:08.334 [main] INFO c.s.masopen.integration.demo.Demo1 - 更新后------>Student[stuNo=0000,name=李四]

很明显,这次对象经过属性重新设置后,没有发生引用传递!

单步调试一下,看对象的值:

第一行创建了1个对象stu:   Student stu = new Student("0000", "李四");

注意右上角stu对象的ID=20

第二行打印:更新前------>Student[stuNo=0000,name=李四]

第三行重新赋值,调试信息如下图

注意,该方法由于重新new了一把对象,stu对象的ID=32

第四行打印,调试信息如下图:

注意右上角对象stu 的ID=20

打印信息为:更新后------>Student[stuNo=0000,name=李四]

分析总结:

1.引用传递前,请先初始化该对象(new,堆中创建);

2.引用传递,在整个对象传递过程中(方法调用),传递对象必须保持不变(不能被重新new),否则整个对象的属性不会做任何修改;

java对象传递小解析的更多相关文章

  1. java 对象传递 是 值传递 还是 引用传递?

    这个问题说实话我感觉没有太大的意义. 按第一印象和c++的一些思想去理解的话对象传递是引用传递,因为传递过去的对象的值能被改变. 但是又有很多人,不知道从哪里扣出来一句,java中只有值传递,没有引用 ...

  2. Java对象 json之间的转换(json-lib)

    在这里主要简单的介绍一下,如何使用json-lib这个工具包来完成Java对象(或集合)与json对象(或集合)之间的转换~ 1. Java对象转换成json(既创建json) 关键类:JSONObj ...

  3. jxcel - 好用的Excel与Java对象转换工具

    更多精彩博文,欢迎访问我的个人博客 Jxcel简介 Jxcel是一个支持Java对象与Excel(目前仅xlsx.xls)互相转换的工具包. 项目地址:https://github.com/jptan ...

  4. JSON数据与Java对象的相互转换

    JSON数据与Java对象的相互转换 JSON解析器 常见的解析器:Jsonlib .Gson. fastjson. jackson JSON转化为Java对象 使用步骤: 1.导入jackson的相 ...

  5. 不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中“不规矩”的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧,调整一下思维便能重用 ...

  6. Android Studio NDK 新手教程(5)--Java对象的传递与改动

    概述 本文主要Java与C++之间的对象传递与取值.包括传递Java对象.返回Java对象.改动Java对象.以及性能对照. 通过JNIEnv完毕数据转换 Java对象是存在于JVM虚拟机中的,而C+ ...

  7. 深入解析Java对象的hashCode和hashCode在HashMap的底层数据结构的应用

    转自:http://kakajw.iteye.com/blog/935226 一.java对象的比较 等号(==): 对比对象实例的内存地址(也即对象实例的ID),来判断是否是同一对象实例:又可以说是 ...

  8. java对象Integer不能引用传递

    java对象Integer不能引用传递 /** * The value of the <code>Integer</code>. * * @serial */ private ...

  9. Binder机制,从Java到C (5. IBinder对象传递形式)

    1.IBinder的传递 Binder IPC通信中,Binder是通信的媒介,Parcel是通信的內容.远程调用过程中,其参数都被打包成Parcel的形式來传递.IBinder对象当然也不例外,在前 ...

随机推荐

  1. shell 终端字符颜色

    终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关,shell,python,perl等均可以调用. 转义序列是以 ESC 开头,可以用 \033 完成相同的工作(ESC ...

  2. css有关鼠标移动上去图片变透明度变化

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Nginx实践:(1) Nginx安装及日志配置

    1. 安装 (1)  Nginx下载地址:https://nginx.org/download/nginx-1.14.0.tar.gz (2)  安装时可能出现依赖库不存在,比如prec包,可以使用y ...

  4. MongoDB Windows环境搭建

    简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可扩展的高性能数据存 ...

  5. crypto-js遇到的坑

    最近在做H5网站,用websocket跟后台交互时,需要对数据进行加密,于是选了crypto-js组件,GitHub上api也不少,写的也清晰,但实际使用上会遇到不少坑: 加密解密时,传入的密钥key ...

  6. hystrix应用介绍(二)

    上篇博客中讲了hystrix在公司中的一些应用场景,由于保密的原因没办法贴出优化的代码,这里专门写一篇hystrix代码的demo,供大家在使用的过程中快速上手 Hystrix有两个请求命令 Hyst ...

  7. logback.xml日志文件过滤器配置简析

    自定义过滤器 java代码,目的是在mdc中放值,然后在日志中打印 package com.controller; import com.pojo.JsonData; import org.slf4j ...

  8. Hibernate课程 初探多对多映射2-4 测试

    package com.ddwei.test; import org.hibernate.Session; import org.hibernate.Transaction; import com.d ...

  9. position 的属性值

    理论上来说,全部 position 的取值有8个 包括:position:static | relative | absolute | fixed | sticky |  initial | inhe ...

  10. lucene中文学习地址推荐

    Lucene原理与代码分析http://www.cnblogs.com/forfuture1978/category/300665.html Lucene5.5学习(1)-初尝Lucene全文检索引擎 ...