以下测试主要为了说明:对传递对象或传递引用进行修改,对最终值的影响情况
  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. The 11th Zhejiang Provincial Collegiate Programming Contest->Problem A:A - Pokemon Master

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3776 题意:比较两组数据的总和大小. #include <iostr ...

  2. JSON用法简介

    [JSON简介] jsoncpp 主要包含三种类型的 class:Value.Reader.Writer.jsoncpp 中所有对象.类名都在 namespace Json 中,包含 json.h 即 ...

  3. [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

    本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(Paa ...

  4. 【零基础学习iOS开发】【02-C语言】11-函数的声明和定义

    在上一讲中,简单介绍了函数的定义和使用,只要你想完成一个新功能,首先想到的应该是定义一个新的函数来完成这个功能.这讲继续介绍函数的其他用法和注意事项. 一.函数的声明 1.在C语言中,函数的定义顺序是 ...

  5. Discuz模版与插件 安装时提示“对不起,您安装的不是正版应用...”解决方法

    关于出现“对不起,您安装的不是正版应用..”的解决办法 有些插件和风格在安装时出现不能安装的现象,出现以下提示:       对不起,您安装的不是正版应用,安装程序无法继续执行       点击这里安 ...

  6. iphone6S“玫瑰金”的秘密——阳极氧化

    阳极氧化对多数人来说是一个熟悉又陌生的名词,大多数可能知道它的作用之一就是是能使金属呈现各种各样色彩.最为人熟知的运用阳极氧化技术的产品就是iphone系列产品了,已经推出了金色,玫瑰金色,深空灰色, ...

  7. Hadoop初步认识

    Hadoop的介绍: Hadoop是一个适用于大数据的并行存储和计算的平台,是 Apache的一个用java 语言实现开源软件框架,实现了在大量计算机组成的集群中对海量数据进行分布式计算.Hadoop ...

  8. 锋利的JQuery-认识Jquery

    今天开始学习菜鸟的JQuery,这本书在一前看过一遍了,但是由于虽然看了,但是将近一年在工作中基本上没有用上,很是悲催,菜鸟想,用一到两个星期时间把这本书看一遍吧.就像菜鸟前面的jsdom一样,菜鸟写 ...

  9. myhuiban会议,期刊,科研人员,计算机类会议大全

    http://www.myhuiban.com/ List of computer science conferences From Wikipedia, the free encyclopedia ...

  10. bzoj2456

    有趣的题目 空间1mb,所以开数组的算法就不要想了(我一开始没看到……) 仔细读题,然后发现这里他限定众数为出现超过n div 2次 也就是说,这个数可以对应每一个不相同的数消掉,最终还剩下这个数 也 ...