以下测试主要为了说明:对传递对象或传递引用进行修改,对最终值的影响情况
  1. public class PassTest {
  2.     @Before
  3.     public void setUp() throws Exception {
  4.     }
  5.     /**
  6.      * 测试对象已经指向具体的值
  7.      */
  8.     @Test
  9.     public void testPass1() {
  10.         // 对象的引用已经指向了具体的对象
  11.         Human human = new Someone();
  12.         Map<String, String> map = new HashMap<>();
  13.         getPerson1(human, map);
  14.         System.out.println("human1:" + human + ", map1:" + map.toString());
  15.         assertEquals("fish", map.get("food"));
  16.         assertEquals("大哥", human.getName());
  17.     }
  18.     /**
  19.      * 测试对象的引用尚未指向了具体的对象
  20.      */
  21.     @Test
  22.     public void testPass2() {
  23.         // 对象的引用尚未指向了具体的对象
  24.         Human human = null;
  25.         Map<String, String> map = null;
  26.         getPerson2(human, map);
  27.         System.out.println("human2:" + human + ", map2:" + map);
  28.         assertEquals(null, map);
  29.         assertEquals(null, human);
  30.     }
  31.     /**
  32.      * 测试对象的引用已经指向了具体的对象,在调用方法中重新指向另一个对象
  33.      */
  34.     @Test
  35.     public void testPass3() {
  36.         // 对象的引用已经指向了具体的对象,在调用方法中重新指向另一个对象
  37.         Human human = new Someone();
  38.         Map<String, String> map = new HashMap<>();
  39.         getPerson3(human, map);
  40.         System.out.println("human3:" + human + ", map3:" + map.toString());
  41.         assertEquals(0, map.size());
  42.         assertEquals(null, human.getName());
  43.     }
  44.     /**
  45.      * 测试对象的引用尚未指向了具体的对象,调用方法中创建对象、赋值,并返回对象的情况
  46.      */
  47.     @Test
  48.     public void testPass4() {
  49.         Human human = null;
  50.         human = getPerson4();
  51.         System.out.println("human4:" + human);
  52.         assertEquals("大哥", human.getName());
  53.     }
  54.     interface Human {
  55.         public String getName();
  56.         public void setName(String name);
  57.         public void eat(Map<String, String> map);
  58.     }
  59.     class Someone implements Human {
  60.         public String name;
  61.         public String getName() {
  62.             return name;
  63.         }
  64.         public void setName(String name) {
  65.             this.name = name;
  66.         }
  67.         @Override
  68.         public void eat(Map<String, String> map) {
  69.             map.put("food", "fish");
  70.         }
  71.         @Override
  72.         public String toString() {
  73.             return "Someone [name=" + name + "]";
  74.         }
  75.     }
  76.     public void getPerson1(Human human, Map<String, String> map) {
  77.         human.setName("大哥");
  78.         human.eat(map);
  79.     }
  80.     public void getPerson2(Human human, Map<String, String> map) {
  81.         human = new Someone();
  82.         map = new HashMap<>();
  83.         human.setName("大哥");
  84.         human.eat(map);
  85.     }
  86.     private void getPerson3(Human human3, Map<String, String> map3) {
  87.         Human human = new Someone();
  88.         Map<String, String> map = new HashMap<>();
  89.         human.setName("大哥");
  90.         human.eat(map);
  91.         human3 = human;
  92.         map3 = map;
  93.     }
  94.     private Human getPerson4() {
  95.         Human human = new Someone();
  96.         human.setName("大哥");
  97.         return human;
  98.     }
  99. }
测试结果:
 


JAVA一个关于传递引用的测试的更多相关文章

  1. java方法强制传递引用参数(做为返回值),改变被传递参数值。

    Java传递参数分为2种: 值类型,Java里面也叫简单类型,这种参数类型的传递的是它的副本拷贝: 引用类型,传递的是对象引用地址,如果在方法内改变该参数对象属性即是对原引用对象的改变:如果不想这样传 ...

  2. java基本数据类型传递与引用传递区别

    文章转载自  zejian的博客http://blog.csdn.net/javazejian/article/details/51192130 java的值传递和引用传递在面试中一般都会都被涉及到, ...

  3. Java是值传递还是引用传递?

    Java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题.这个问题一般是相对函数而言的,也就是Java中所说的方法参数,那么我们先来回顾一下在程序设计语言中有关参数传递给方法的两 ...

  4. java传值与传引用

    一.传值与传引用 1.不管java参数的类型是什么,一律传递参数的副本. 在thinking in java中,明确指出,如果java是传值,那么传递的是值的副本,如果java传递的是引用,那么传递的 ...

  5. Java 为值传递而不是引用传递

    ——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...

  6. java是值传递还是引用传递

    首先写一个简便的Employee,以便测试使用. class Employee { private String name; public Employee(String name) { this.n ...

  7. 堆栈详解 + 彻底理解Java的值传递和引用传递

    本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨 ...

  8. Java的值传递和引用传递的说法

    学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java ...

  9. Java中值传递和引用传递的概念

    很多书中都提到了在Java中只存在值传递,但是今天在一个NanoHTTPD的源码中看到这样一段: if (qmi >= 0) { decodeParms(uri.substring(qmi + ...

随机推荐

  1. [转载]c# 多线程一个带多个参数的方法

    比如我要线程一个private void subPing(int pre,int end) 我在Thread t=之后应该如何写 用匿名委托吧!那么简单为什么要这样写!t = new Thread(d ...

  2. WIN7+Ubuntu双系统,win7启动不了

    在网上搜索了下,大多说的是因为重装引起的坏道, 我经过半天的搜索才找到了问题所在,首先看看下面连接的二楼大神给出的解决方案: https://forum.ubuntu.org.cn/viewtopic ...

  3. Java中获取完整的访问url

    Java中获得完整的URl字符串: HttpServletRequest httpRequest=(HttpServletRequest)request; String strBackUrl = &q ...

  4. cocos2d-x 锚点,位置==》动手实验记录 多动手... :)

    总结: 1:cocos2d-x的位置由锚点和Position位置 共同决定的.2: cocos2d-x,当位置不设置或者为零的时候, 子节点的锚点位置永远位于父节点的左小角的地方3:我们的自己的游戏编 ...

  5. MyEclipse中创建maven工程

    转载:http://blog.sina.com.cn/s/blog_4f925fc30102epdv.html     先要在MyEclipse中对Maven进行设置: 到此Maven对MyEclip ...

  6. QT插件开发方式(作者有RemOjbects文档翻译(48)篇)

    创建一个QT的库项目,删除自动生成的.h和.cpp文件,添加一个接口定义.h文件和一个接口实现类(一个.h一个.cpp).代码如下: 1.接口文件源码 #ifndef PLUGININTERFACE_ ...

  7. WPF使用第三方的字体(TTF文件)

    一.准备好你要使用的字体文件,以TTF结尾的文件,然后复制到项目中,并设置Build Action(生成操作)为Resource(资源): 二.在App.xaml中或者你需要的地方添加资源的定义: & ...

  8. python学习笔记一--字符串

    一.字符串: (一)字符串里单个元素的操作 1. 单个字符(元素)的序列组合. 2. 序列:单个字符的位置 3. 序列的操作:内置函数len获取长度,加位置索引 4. 获取字符串的里的元素:正向索引+ ...

  9. Java之Comparable接口和Comparator接口

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的: Comparable 是在集合内部定义的方法实现的排序: Comparator 是在集合外部实现的排序: ...

  10. 1494. Monobilliards(栈)

    1494 之前记得数据结构试卷上有这种题 就是判断某一出栈顺序 是不是满足以1.2...n为入栈顺序 a1,a2,a3..an; 对于任意相邻a[i],a[i+1] 如果a[i]>a[i+1]+ ...