Map<String, Object> map = new HashMap<String, Object>();
Map<String, String> params = new HashMap<String, String>();
map.put("params", params);
params.put("key", key);
Map的put不是put一个对象,而是put一个对象的引用!该对象更新后,Map里面被put的引用随着改变。
对于String,我用代码测试了一下:
String a = new String("111");
String b = a;
a = "222";
System.out.println(b);//结果是111
System.out.println(b.equals(a));//false
测试结果是b仍然为111。
String b = a;表示a和b指向同一个字符串"111"的引用。
a = "222";表示把a改变为指向"222"的应用,而此时b保持不变。
再看Sting数组
String a[] = { "1","2","3" },
String b[] = null;
b = a;
a[0] = "4";
System.out.println(b[0]); //结果是4
System.out.println(b.equals(a));//true
此时输出的又是4!这个跟上面的Map类似。
此时在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用(地址),这时候b与a指向同一个内存地址,即同一个对象(数组),改变数组a的值的时候,也就相当于改变了b的值。
引用
Java对对象和基本的数据类型的处理是不一样的。和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的函数体内部的操作都是针对这个拷贝的操作,函数执行结束后,这个局部变量也就完成了它的使命,它影响不到作为输入参数的变量。这种方式的参数传递被称为"值传递"。
而在Java中用对象的作为入口参数的传递则缺省为"引用传递",也就是说仅仅传递了对象的一个"引用",这个"引用"的概念同C语言中的指针引用是一样的。当函数体内部对输入变量改变时,实质上就是在对这个对象的直接操作。
除了在函数传值的时候是"引用传递",在任何用"="向对象变量赋值的时候都是"引用传递"。
分享到:
相关推荐
第4章 面向对象(封装) 4课时 理解类封装属性(数据成员)和行为(方法成员),区别类和对象。 能够定义类,创建类的对象(实例化类)和通过对象引用访问数据成员和方法成员;形成定义类和使用类...
5.1.3 对象、引用和指针 111 5.1.4 对象的this引用 112 5.2 方法详解 116 5.2.1 方法的所属性 116 5.2.2 方法的参数传递机制 116 5.2.3 形参长度可变的方法 120 5.2.4 递归方法 121 5.2.5 方法重载 123 学生...
11.2.2 输入/输出流类和对象 11.3 输出流 11.3.1 流插入运算符 11.3. 2 连续使用流插入/流读取运算符 11.3.3 输出char类型的变量 11.3.4 用成员函数put输出字符和put函数的连续调用 11.4 输入流 ...
11.2.2 输入/输出流类和对象 11.3 输出流 11.3.1 流插入运算符 11.3. 2 连续使用流插入/流读取运算符 11.3.3 输出char类型的变量 11.3.4 用成员函数put输出字符和put函数的连续调用 11.4 输入流 ...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
魔法值是指程序中随意定义并赋值的变量值,如果代码编写者明白变量值意义是可以任意使用的,例如在代码中写if(status == 3) return error;符合规范。 C .如果变量值仅在一个范围内变化推荐用Enum类。 D .在程序...