以下测试主要为了说明:对传递对象或传递引用进行修改,对最终值的影响情况
  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. win8连接蓝牙听歌

    今天买了一个蓝牙耳机,琢磨着在win8.1上听一下,可是折腾了一阵时间,现在把最佳配置方式写出来,希望对朋友有所帮助 确保win8的蓝牙驱动已经安装完毕,并且开启蓝牙,win8,设置--右下角更改电脑 ...

  2. 李洪强iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)

    iOS开发拓展篇—UIDynamic(重力行为+碰撞检测) 一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (inst ...

  3. 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)

    解放方法 右键打开这个项目引用System.Web.Mvc,如图: 将复制本地的值改为True,英文的话应该是Copy Local,这样就解决了上面的报错问题.

  4. QT5.7交叉编译安装到arm(好多系列文章)

    以下采用的系统为ubuntu16.04,开发板为迅为iTOP4412,4.3寸屏. 下载qt5.7源码qt-everywhere-opensource-src-5.7.0.tar.xz http:// ...

  5. VPN+NAT实现代理服务器功能

    前话 用VPN+NAT再结合路由可以实现很方便的代理功能,适用于有一台能方便连接Internet的电脑,其他不在同一子网内的电脑能够连接到这台机器但不能完全访问Internet.比如好些学校的校园网, ...

  6. Android 通过 Intent 传递类对象

    Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...

  7. WINCE6.0+IMX515通过cfimager.exe烧录镜像文件

    WINCE6.0+IMX515通过cfimager.exe烧录镜像文件 freescale提供了cfimager.exe工具,可在SD/MMC卡中烧录系统镜像文件和创建FAT文件,这样,我们可以不需要 ...

  8. Nandflash 驱动移植

    前段时间,研究了一下4G的Nandflash驱动.手头上只有飞凌6410BSP自带的Nandflash驱动,该驱动不支持K9GAG08U0D(2G)和K9LBG08U0D(4G)的Nandflash. ...

  9. Android开发之技术文章索引

    Activity: 1.PreferenceActivity Fragment: 1.fragment中套用PagerSlidingTabStrip,切换底部时viewpager消失的解决 Widge ...

  10. [POJ 3420] Quad Tiling

      Quad Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3495   Accepted: 1539 Des ...