目的:加深对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. IdentityServer(14)- 使用EntityFramework Core配置和操作数据

    IdentityServer具有良好的扩展性,其中一个可扩展点是用于IdentityServer所需数据的存储机制. 本快速入门介绍了如何配置IdentityServer以使用EntityFramew ...

  2. cobaltstrike安装加破解教程+使用教程

    1.先安装java环境= = 1. 下载1.8u121的JAVA JDK (新的java JDK不稳定)!!原因:https://blog.cobaltstrike.com/2017/04/26/ja ...

  3. sqlmap完成简单的sql注入

    扫描目标站点,是否存在注入 --users获取用户名 --dump --tables探测表和数据库信息 跑出来的字段 admin --dump -T admin -C admin,password暴库 ...

  4. hdu_1041(Computer Transformation) 大数加法模板+找规律

    Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  5. GO开发[四]:golang函数

    函数 1.声明语法:func 函数名 (参数列表) [(返回值列表)] {} 2.golang函数特点: a. 不支持重载,一个包不能有两个名字一样的函数 b. 函数是一等公民,函数也是一种类型,一个 ...

  6. kali中的webshell

    webacoo -g 生成一句话 -o 输出文件 -r 不混淆代码 -t 连接模式 -u 制定URL 生成一句话 webacoo -g -o a.php 连接一句话 webacoo -t -u htt ...

  7. webpack + babel

    webpack设计思想:不区分.png .css .js 等文件,都视为一个模块.通过require导入,loader加载器编译之后打包在一个主js文件里. 优势:减少http请求. 1. webpa ...

  8. TypeScript装饰器(decorators)

    装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上,可以修改类的行为. 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被 ...

  9. reduceByKeyLocally

    2017年3月15日, 星期三 reduceByKeyLocally--Transformation类算子 代码示例  

  10. 织梦CMS安装分享插件

    获取百度分享按钮织梦系统插件 点击下载:dedecms 5.* 插件 更新日期:2011.09.05 1.下载百度分享插件的织梦cms版本. 2.使用管理员账号登录您的站点后台管理中心,单击" ...