关于Map类型变量作用范围的疑问

问题描述

请先看下面的代码,非常简单:public static void main(String[] args) {int i = 1;plus(i);System.out.println(i); // 打印 1 Map map = new HashMap();map.put("orange", "ORANGE");addOneEntry(map);System.out.println(map); // 打印 {orange=ORANGE, apple=APPLE}}private static void plus(int i){i += 1;}private static void addOneEntry(Map map){map.put("apple", "APPLE");} 我的问题就在这里,我的map变量定义在main方法内,按理说它应该是局部变量,但为什么它还会受addOneEntry()方法的影响,出了这个方法后还会增加多一个entry?就好像它是静态变量一样... 我试过int,String,数组和自定义类型的变量,他们的作用范围都只限于声明它们的方法内,为什么Map(List也一样)类型的变量会这样? 谢谢各位大虾!

解决方案

传递的是引用值,通过引用值修改的是同一块内存区域。好好理解下吧,参考下我的博客:《图解Java中的值传递与引用传递(更新版)》http://xiaolongfeixiang.iteye.com/blog/652235
解决方案二:
呵呵 楼上很猛嘛!这个其实是个很实际的问题!送你两句话 解决问题1.0 java 只有值传递(相对址传递来说的)2.0 当你传过去的是 对象引用时 可以改变原有对象的属性或者值分析下你的例子:引用 addOneEntry(map); 这里 map 是不是 可以找到整个对象map 呢! 他就是引用!你给 map 添加个对象 会改变 map 的! 符合第2条!如果你传的 是 int i 这样是传过去的值 不会改变的!

时间: 2024-10-28 16:17:05

关于Map类型变量作用范围的疑问的相关文章

AJAX从服务端获取数据的三种方法

本文为原创,如需转载,请注明作者和出处,谢谢!     在本文中将给出一个例子来介绍使用AJAX技术从服务端获得数据的三种方法.这个例子很简单,就是两个选择框(html中的<select>标签),通过选中第一个select的某一项后,会从服务端得到一些数据,并加载到第2个select中. 方法一.从服务端获得XML格式的数据 从服务端获得数据的最容易想到的方法就是在服务端反加一定格式的数据,一般是XML格式,然后在服务端使用XMLDocument或其他技术来读取这些数据,并生成<sele

ombiner partition-关于Map端的Combiner和Partition的执行顺序的疑问

问题描述 关于Map端的Combiner和Partition的执行顺序的疑问 Map的输出结果先保存在缓存中,待缓存达到阈值将结果保存到临时文件. Partition是根据键key来决定该结果进入哪个reduce:Combiner是将map端输出的结果按key合并,它们的执行顺序或者执行过程是什么样子呢

Scalaz(6)- typeclass:Functor-just map

  Functor是范畴学(Category theory)里的概念.不过无须担心,我们在scala FP编程里并不需要先掌握范畴学知识的.在scalaz里,Functor就是一个普通的typeclass,具备map over特性.我的理解中,Functor的主要用途是在FP过程中更新包嵌在容器(高阶类)F[T]中元素T值.典型例子如:List[String], Option[Int]等.我们曾经介绍过FP与OOP的其中一项典型区别在于FP会尽量避免中间变量(temp variables).FP

从零开始_学_数据结构(五)——STL(map、set、list、vector)

STL容器   前注: STL(标准模板库)是一个C++的软件库,也是C++标准程序库的一部分. 这些容器,应该都是STL里面的一个类. vector封装数组.list封装链表.map和set封装二叉树   一.list 在不懂的时候,list可以理解为双向链表(很像,但事实上不是). (1)声明一个list对象: ①包含头文件list:#include<list> ②声明他:std::list<int> one; //声明一个list对象 ③需要注意,list位于std名称空间之

java基础-学到java集合框架中对那个复写equals的疑问,求解答

问题描述 学到java集合框架中对那个复写equals的疑问,求解答 import java.util.*; class Student implements Comparable { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Student s) { int num = new Inte

代码-关于SimpleAdapter的几点疑问

问题描述 关于SimpleAdapter的几点疑问 新手刚学安卓,今天看到GridView组件,用SimpleAdapter实现,但是代码中有看不懂的地方 package org.crazyit.ui; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; import android.app.Activity;import android.os.Bundle

关于javascript 的history.go()疑问

问题描述 关于javascript 的history.go()疑问 本人做登录页面,HTML提交表单到check.php,该页面验证输入信息后跳转到不同页面,如果验证不通过,跳转到wrong.php,该页面提示错误类型并返回登录页.其中返回登录页我用的是history.go(-1),但是按照理解,wrong.php之前的地址应该是check.php,可是通常情况下直接返回到登录页了.所以我想问的是,提交表单的验证页面check.php如果没有任何HTML输出,即没有在浏览器留下缓存记录,是不是不

源代码-jquery closest的疑问

问题描述 jquery closest的疑问 jquery中的closest方法可以用来查找制定的父类元素,并可以设置查询的上下文context,不过如果context正好是closest找的父类的话,貌似会被过滤掉,不知道是否是jquery的问题还是我理解有问题.代码如下: jquery: var contextElem = document.getElementById(""row1""); $(""img"").clos

泛型-对于Java反射的安全性的一些疑问

问题描述 对于Java反射的安全性的一些疑问 最近在看深入理解JVM,随手写了一点代码,有个问题不太理解. 代码如下: public static void main(String[] args) throws Exception { HashMap<Integer, String> map = new HashMap<Integer, String>(); Method put = HashMap.class.getMethod("put", Object.c