java对象引用-要掌握的细节2
目的:加深对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的更多相关文章
- java对象引用-要掌握的细节
hello ,好久没来了. 今天我来和大家分享一下有关引用变量的注意事项,一是加深一下自己的理解,二是对这块不太理解的同学可以看看. 大神可飘过,有什么不对或不足的地方请多多指教,谢谢. 假设场景: ...
- Java编写画图板程序细节-保存已画图形
没有Java编写画图板程序细节-保存已画图形 一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...
- java对象与java对象引用的区别
java对象与java对象引用的区别 对象与对象引用的区别 直接用例子说话吧 Person per = new Person("张三"); 这一条语句,其实包括了四个动作: 右边的 ...
- JAVA 对象引用,以及对象赋值
注:引自http://zwmf.iteye.com/blog/1738574 关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里, ...
- Java对象引用
1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...
- JAVA 对象引用,以及对象赋值(转)
原文链接:http://zwmf.iteye.com/blog/1738574 关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里 ...
- Java对象引用和对象赋值
关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用,那实在没法很好 ...
- Java与c#的一些细节区别
实习中用的语言是c#,第一次接触到这种语言,然后写的过程中,发觉和Java几乎一摸一样,好像根本是无缝切换,但细节仍有很大的区别,称有空总结一波里面的部分细节实现. ps. 我写c#过程中,发觉c#有 ...
- Java对象引用传递探索
一直认为自己对对象传递理解的颇为深刻,没想到最近一次的编码中,就犯下了这样的错误,令自己排查了很久才找到问题的根源, 辅以小case记录以自省. 代码如下: public class ObjRefer ...
随机推荐
- IdentityServer(14)- 使用EntityFramework Core配置和操作数据
IdentityServer具有良好的扩展性,其中一个可扩展点是用于IdentityServer所需数据的存储机制. 本快速入门介绍了如何配置IdentityServer以使用EntityFramew ...
- cobaltstrike安装加破解教程+使用教程
1.先安装java环境= = 1. 下载1.8u121的JAVA JDK (新的java JDK不稳定)!!原因:https://blog.cobaltstrike.com/2017/04/26/ja ...
- sqlmap完成简单的sql注入
扫描目标站点,是否存在注入 --users获取用户名 --dump --tables探测表和数据库信息 跑出来的字段 admin --dump -T admin -C admin,password暴库 ...
- hdu_1041(Computer Transformation) 大数加法模板+找规律
Computer Transformation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- GO开发[四]:golang函数
函数 1.声明语法:func 函数名 (参数列表) [(返回值列表)] {} 2.golang函数特点: a. 不支持重载,一个包不能有两个名字一样的函数 b. 函数是一等公民,函数也是一种类型,一个 ...
- kali中的webshell
webacoo -g 生成一句话 -o 输出文件 -r 不混淆代码 -t 连接模式 -u 制定URL 生成一句话 webacoo -g -o a.php 连接一句话 webacoo -t -u htt ...
- webpack + babel
webpack设计思想:不区分.png .css .js 等文件,都视为一个模块.通过require导入,loader加载器编译之后打包在一个主js文件里. 优势:减少http请求. 1. webpa ...
- TypeScript装饰器(decorators)
装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上,可以修改类的行为. 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被 ...
- reduceByKeyLocally
2017年3月15日, 星期三 reduceByKeyLocally--Transformation类算子 代码示例
- 织梦CMS安装分享插件
获取百度分享按钮织梦系统插件 点击下载:dedecms 5.* 插件 更新日期:2011.09.05 1.下载百度分享插件的织梦cms版本. 2.使用管理员账号登录您的站点后台管理中心,单击" ...