JAVA一个关于传递引用的测试
public class PassTest {
@Before
public void setUp() throws Exception {
}
/**
* 测试对象已经指向具体的值
*/
@Test
public void testPass1() {
// 对象的引用已经指向了具体的对象
Human human = new Someone();
Map<String, String> map = new HashMap<>();
getPerson1(human, map);
System.out.println("human1:" + human + ", map1:" + map.toString());
assertEquals("fish", map.get("food"));
assertEquals("大哥", human.getName());
}
/**
* 测试对象的引用尚未指向了具体的对象
*/
@Test
public void testPass2() {
// 对象的引用尚未指向了具体的对象
Human human = null;
Map<String, String> map = null;
getPerson2(human, map);
System.out.println("human2:" + human + ", map2:" + map);
assertEquals(null, map);
assertEquals(null, human);
}
/**
* 测试对象的引用已经指向了具体的对象,在调用方法中重新指向另一个对象
*/
@Test
public void testPass3() {
// 对象的引用已经指向了具体的对象,在调用方法中重新指向另一个对象
Human human = new Someone();
Map<String, String> map = new HashMap<>();
getPerson3(human, map);
System.out.println("human3:" + human + ", map3:" + map.toString());
assertEquals(0, map.size());
assertEquals(null, human.getName());
}
/**
* 测试对象的引用尚未指向了具体的对象,调用方法中创建对象、赋值,并返回对象的情况
*/
@Test
public void testPass4() {
Human human = null;
human = getPerson4();
System.out.println("human4:" + human);
assertEquals("大哥", human.getName());
}
interface Human {
public String getName();
public void setName(String name);
public void eat(Map<String, String> map);
}
class Someone implements Human {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void eat(Map<String, String> map) {
map.put("food", "fish");
}
@Override
public String toString() {
return "Someone [name=" + name + "]";
}
}
public void getPerson1(Human human, Map<String, String> map) {
human.setName("大哥");
human.eat(map);
}
public void getPerson2(Human human, Map<String, String> map) {
human = new Someone();
map = new HashMap<>();
human.setName("大哥");
human.eat(map);
}
private void getPerson3(Human human3, Map<String, String> map3) {
Human human = new Someone();
Map<String, String> map = new HashMap<>();
human.setName("大哥");
human.eat(map);
human3 = human;
map3 = map;
}
private Human getPerson4() {
Human human = new Someone();
human.setName("大哥");
return human;
}
}


JAVA一个关于传递引用的测试的更多相关文章
- java方法强制传递引用参数(做为返回值),改变被传递参数值。
Java传递参数分为2种: 值类型,Java里面也叫简单类型,这种参数类型的传递的是它的副本拷贝: 引用类型,传递的是对象引用地址,如果在方法内改变该参数对象属性即是对原引用对象的改变:如果不想这样传 ...
- java基本数据类型传递与引用传递区别
文章转载自 zejian的博客http://blog.csdn.net/javazejian/article/details/51192130 java的值传递和引用传递在面试中一般都会都被涉及到, ...
- Java是值传递还是引用传递?
Java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题.这个问题一般是相对函数而言的,也就是Java中所说的方法参数,那么我们先来回顾一下在程序设计语言中有关参数传递给方法的两 ...
- java传值与传引用
一.传值与传引用 1.不管java参数的类型是什么,一律传递参数的副本. 在thinking in java中,明确指出,如果java是传值,那么传递的是值的副本,如果java传递的是引用,那么传递的 ...
- Java 为值传递而不是引用传递
——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...
- java是值传递还是引用传递
首先写一个简便的Employee,以便测试使用. class Employee { private String name; public Employee(String name) { this.n ...
- 堆栈详解 + 彻底理解Java的值传递和引用传递
本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨 ...
- Java的值传递和引用传递的说法
学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java ...
- Java中值传递和引用传递的概念
很多书中都提到了在Java中只存在值传递,但是今天在一个NanoHTTPD的源码中看到这样一段: if (qmi >= 0) { decodeParms(uri.substring(qmi + ...
随机推荐
- EF+lambda表达式 实现LIKE模糊查询
s => s.XianWID.StartsWith(str) 匹配以str开头的 s => s.XianWID.EndsWith(str) 匹配以str结尾的 s => s.Xian ...
- 解决win8 64位提示MSVCP71.DLL等组件缺失
把压缩包里面的DLL解压,只需要把其实缺失DLL复制到C:\Windows\SysWOW64即可.压缩包包含MSVCP70.DLL.MSVCP71.DLL.MSVCR70.DLL.MSVCR71.DL ...
- Injection Attacks-Log 注入
日志注入(也称日志文件注入) 很多应用都维护着一系列面向授权用户.通过 HTML 界面展示的日志,因而成为了攻击者的首要目标,这些攻击者试图伪装其他攻击.误导日志读者,甚至对阅读和分析日志监测应用的用 ...
- POJ1260Pearls
http://poj.org/problem?id=1260 题意 :这个题大概是讲,给你几种等级不同的珠宝,然后告诉你它的数量和价值,等级是升序排列的,且随等级的升高价值也随之升高,但为了防止有的客 ...
- c缺陷与陷阱笔记-第二章 语法陷阱
1.函数的调用和番薯返回值是函数指针的声明 定义一个函数指针,例如 int (*fp)(float),这个函数的返回值是Int,参数是1个float类型,调用这个函数的方法是 (*fp)(),还有f ...
- hbase集群在启动的时候找不到JAVA_HOME的问题
hbase集群在启动的时候找不到JAVA_HOME的问题,启动集群的时候报错信息如下: root@master:/usr/local/hbase-/bin# ./start-hbase.sh star ...
- linux下使用yum安装mysql、tomcat、httpd
一.linux下使用yum安装mysql 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep m ...
- C#基础精华05(正则表达式,)
正则表达式 . 任意一个字符 除了\n以外的 [] [0-9] [0-9a-zA-Z] | 或 [0-9]|[a-z] () 提升优先级别 分组 ([a]|[0-9])[0 ...
- C中如何调用C++函数、类内函数 \混编\链接
在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂 ...
- latex 写作
一.下载:http://www.ctex.org/CTeXDownload 二.bst文件的作用 在tex文件调用bib时,如 \bibliographystyle{Science} \bibliog ...