目的:加深对java引用变量的理解,避免数据的处理的偏差。

问题:

1.一个集合List ,将新建Student对象stu放入List之后,再给stu的成员变量例如id,name赋值。此时List中的stu的值改变了吗?

2.一个Student的对象stu,当做modifyStuName()方法的参数传入。此时在该方法体内执行stu.setName("value"); ,被调函数的stu对象的name值改变了吗?

3.一个Student的对象stu,stu的id为001,name为张三。新建stu2对象,执行stu2=stu; stu2.setName(); ,此时stu对象的name值发生改变了吗?

4.一个Student的对象stu,当做方法的参数传入方法体内。此时将该stu对象作为该方法的返回值,被调函数中的这两个对象是同一个对象吗?

好了,开始:

学生类:

package indi.bruce.test007;

public class Student {

	private int id ;
private String name;
private int age; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }

  

下面的例子对应上述的4个问题

package indi.bruce.test007;

import java.util.ArrayList;
import java.util.List; import org.junit.Test; public class TestHaHa { @Test
public void scene1(){
List<Student> stuList = new ArrayList<Student>();
Student stu = new Student(); stuList.add(stu); stu.setId(001);
stu.setName("尼古拉斯赵四");
stu.setAge(23); put(stuList.get(0).getId());
put(stuList.get(0).getName());
put(stuList.get(0).getAge()); } @Test
public void scence2(){
Student stu = new Student();
stu.setName("神探夏洛克");
modifyStuName(stu);
put("修改后:"+stu.getName());
} public void modifyStuName(Student stu){
put("修改前:"+stu.getName());
stu.setName("夏洛特烦恼");
} @Test
public void scence3(){
Student stu = new Student();
stu.setName("张飞");
put(stu.getName()); Student stu2 = stu;
stu2.setName("关羽"); put(stu.getName());
put(stu2.getName());
} @Test
public void scence4(){
Student stu = new Student();
stu.setName("go to hell");
Student stu2 = bridge(stu);
put(stu.equals(stu2));
put(stu == stu2);
} public Student bridge(Student stu){
return stu;
} public static void put(Object obj){
System.out.println(obj);
}
}

  

4个例子输出的情况分别为:

1
尼古拉斯赵四
23

答1:改变了

修改前:神探夏洛克
修改后:夏洛特烦恼

答2:改变了

张飞
关羽
关羽

答3:改变了

true
true

答4:同一个 ,用"==" 比较是比较一下两个对象的内存地址是否相等。

以上疑问,请到我总结的应用变量第一节:http://www.cnblogs.com/xxyfhjl/p/4574057.html

  

java对象引用-要掌握的细节2的更多相关文章

  1. java对象引用-要掌握的细节

    hello ,好久没来了. 今天我来和大家分享一下有关引用变量的注意事项,一是加深一下自己的理解,二是对这块不太理解的同学可以看看. 大神可飘过,有什么不对或不足的地方请多多指教,谢谢. 假设场景: ...

  2. Java编写画图板程序细节-保存已画图形

    没有Java编写画图板程序细节-保存已画图形   一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...

  3. java对象与java对象引用的区别

    java对象与java对象引用的区别 对象与对象引用的区别 直接用例子说话吧 Person per = new Person("张三"); 这一条语句,其实包括了四个动作: 右边的 ...

  4. JAVA 对象引用,以及对象赋值

    注:引自http://zwmf.iteye.com/blog/1738574 关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里, ...

  5. Java对象引用

    1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...

  6. JAVA 对象引用,以及对象赋值(转)

    原文链接:http://zwmf.iteye.com/blog/1738574 关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里 ...

  7. Java对象引用和对象赋值

    关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用,那实在没法很好 ...

  8. Java与c#的一些细节区别

    实习中用的语言是c#,第一次接触到这种语言,然后写的过程中,发觉和Java几乎一摸一样,好像根本是无缝切换,但细节仍有很大的区别,称有空总结一波里面的部分细节实现. ps. 我写c#过程中,发觉c#有 ...

  9. Java对象引用传递探索

    一直认为自己对对象传递理解的颇为深刻,没想到最近一次的编码中,就犯下了这样的错误,令自己排查了很久才找到问题的根源, 辅以小case记录以自省. 代码如下: public class ObjRefer ...

随机推荐

  1. uboot中 make xxx_config 的作用(以make smdk2410_config为例)

    1.创建到目标板相关文件的链接 ln -s asm-arm asm ln -s arch-s3c24x0 asm-arm/arch ln -s proc-armv asm-arm/proc 2.创建i ...

  2. MYSQL的REPLACE和ON DUPLICATE KEY UPDATE使用

    REPLACE 我们在使用数据库时可能会经常遇到这种情况.如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的错误.当然,我们可能想用新记录 ...

  3. Java_web学习(二) eclipse(tomcat)配置

    1.先下载eclipse,隔代版本最佳 https://www.eclipse.org/ 2.创建workspace01存放项目代码 3.配置工作目录: IDE相关配置信息 2 没有配置tomcat, ...

  4. mysqlfront提示过期解决方式

    帮助菜单(help)->登记(registration) 粘贴就好了 gNBpPFgyOw9Rwt/ozsnjgM7tJNo2 bhaaAThangemMkaz2tQhq3/f7dZ7Vj29W ...

  5. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  6. CTF---Web入门第六题 因缺思汀的绕过

    因缺思汀的绕过分值:20 来源: pcat 难度:中 参与人数:6479人 Get Flag:2002人 答题人数:2197人 解题通过率:91% 访问解题链接去访问题目,可以进行答题.根据web题一 ...

  7. AtCoder Regular Contest 078

    我好菜啊,ARC注定出不了F系列.要是出了说不定就橙了. C - Splitting Pile 题意:把序列分成左右两部分,使得两边和之差最小. #include<cstdio> #inc ...

  8. RabbitMQ 使用demo

    1.新建一个控制台应用程序:如图 2.代码如下: using RabbitMQ.Client;using RabbitMQ.Client.Events;using System;using Syste ...

  9. cdn和反向代理

    都是用来加速网站访问速度 cdn和反向代理的基本原理都是使用缓存,区别在于cdn部署在网络提供商的机房,使用户在请求网络服务时,可以从距离自己最近的网络提供商机房获取数据:而反向代理则部署在网站的中心 ...

  10. [国嵌攻略][065][DM9000驱动程序设计]

    移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x4800 ...