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 + ...
随机推荐
- [转载]jquery cookie的用法
原文地址:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526663.html jQuery cookie是个很好的cookie插件 ...
- PLSQL显示乱码-无法进行中文条件查询解决
PLSQL显示乱码-无法进行中文条件查询解决 原因: PLSQL乱码问题皆是ORACLE服务端字符集编码与PLSQL端字符集编码不一致引起.类似乱码问题都可以从编码是否一致上面去考虑. 解决: 1. ...
- dll的概念 dll导出变量 函数 类
1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接 ...
- 【leetcode】4Sum(middle)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- c# 可访问性级别
使用访问修饰符 public.protected.internal 或 private 可以为成员指定以下声明的访问级别之一. 声明的可访问性 含义 public 访问不受限制. protecte ...
- Git教程(9)集中式工作方式常用的设计分支的方案
Git是一个复杂的版本管理系统,管理代码有很多工作方式,如集中式,管理者式,司令/副官式 本文是假设选用集中式工作方式时,设计分支的方案. 中小型项目: 维护两个长期分支,分别是master 和 de ...
- Android开发之极光推送基本步骤
[转]:http://wyong.blog.51cto.com/1115465/1402842 两天在研究推送的问题,后来确定了用极光推送,本人将整个过程整理一下: 1.到极光官网注册账号:https ...
- unity3d游戏物体跟着鼠标方向移动
效果:当点击鼠标左键时,游戏对象会朝鼠标点击的方向移动,类似魔兽争霸一样. 思路:把鼠标的坐标转化成世界坐标(鼠标默认是屏幕坐标),然后当点击鼠标时,物体将朝着鼠标的世界坐标方向移动. 如果你看到这的 ...
- APIO2012派遣
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1196 Solved: 586[Submit ...
- apache开源项目--Apache Drill
为了帮助企业用户寻找更为有效.加快Hadoop数据查询的方法,Apache 软件基金会发起了一项名为“Drill”的开源项目.Apache Drill 实现了 Google's Dremel. Apa ...