项目中遇到的引用传递引发的问题

最近项目部署在服务器以上出现了一个问题,就是下拉框出现了本来不应该存在在这个下拉框中的分类,领导让我和另一个实习生一起找原因在哪,下拉框中的内容是程序起来的时候加载到缓存中的,代码是这样

码表会被放到一个HashMap里,大致就是map<1001,<1,"竞赛">>  这个意思。当时我全部思维都在考虑是不是加载过程中出现了问题,甚至想到了是不是因为线程不安全,在插入当前键的时候,脏读了。但是觉得又不太可能,当前key里面多的仅仅是另一个key全部的数据,不会这么凑巧,确实是没有想到问题出在哪里。然后领导给我们俩举了几个例子(说实话,一个十几年的老开发能够这么用心的教我们甚至从基础给我们讲真的很难得,我很尊敬的一个人)

看见这例子我就有点知道领导是啥意思了,果不其然一看出错的代码,恍然大悟。

riskType只是1106这个键的map对象的一个引用,而putAll进去101000这个key的map的值,实际上还是对缓存中的数据进行的操作,所以一执行这个方法,缓存中1106这个map里面的值就变成了1106和101000的全部数据了,页面显示也就出错。这里也就是涉及到了java中引用传递和值传递的问题,java核心技术中说过,所有的传递实际上都是值传递,传递的都是引用的copy,虽然一个方法执行完毕,创建的这个引用就断了,但是对这个引用所连接到的对象所做的操作却是不可逆的,这也是这个问题形成的问题。虽然这段代码不是我写的,但是我写的话也难免会出现这样的问题,虽然这些基础我明白,但是思维局限在这,不会想到实际开发中会造成的这种问题,所以写这篇博客提醒自己,写代码的时候一定不要粗心。最后我改完以后这个地方成了这样

有什么错误请大家多多指教。

原文地址:https://www.cnblogs.com/wxw7blog/p/9382327.html

时间: 2024-10-29 09:06:03

项目中遇到的引用传递引发的问题的相关文章

Java中String是不是引用传递?

本文转自:http://www.jcodecraeer.com/a/chengxusheji/java/2012/0805/340.html 编者语:书上都说string是引用类型,但事实上我所看到的string和所谓的值类型没有什么区别,但通过看以下的文章,明白了: 1.string a="abc";之后,如果a="xy",则是a并没有改变内存中已经存在的"abc",而是又创建了另外一个实例.实际上相当于:string a=new String

检测项目中的循环引用引起的内存问题

说到检测项目中的循环引用 可以有很多手段,其中牛叉的 instruments 当然是把利器. 当然开发过程中往往会大意引起的 循环引用 比如:忘写了 @weakify(self) && @strongify(self); 在大量使用RAC 和 block..... 当然引起这类原因还有很多... 如果分工明确的话可能会再项目结束后,专门测试这块...然而好像并不是每次迭代都会做这块的工作,除非被明确发现引起崩溃的情况. so  要是能把这个工作引入debug 期间,如果引起循环引用 可以抛

ASP.NET项目中,无法引用App_Code中的类

ASP.NET项目中,无法引用App_Code中的类 最近在做Walmart的项目,其中一个付款系统是ASP.NET编写的.遇到一个问题就是无法引用App_Code中的类. 而且在后台代码中编写代码时,也没有智能提示.生成解决方案时会报错:对应的名称空间或类型不存在或找不到. 解决办法就是选中相应类文件,在属性中设置"生成操作"(Build Action),从内容(Content)修改为编译(Compile).

Java中参数的引用传递和值传递

1.一些定义 值传递:把实际传入参数的值,在内存中赋值一份 引用传递:传入的是实际参数的地址 2.传递基本类型的参数 因为Java是值传递,那就不难理解下面的代码不交换任何值 swap(Type arg1, Type arg2) { Type temp = arg1; arg1 = arg2; arg2 = temp; } 3.传递引用变量的参数 Java都是通过引用来操作对象的,所有指向对象的变量都是引用,然而,Java不会把引用传递给方法的参数,而是引用的值: 那么,为什么对象的成员值可以改

Java方法中传值和引用传递的问题(转)

说明:标题其实说法是错误的.Java中只有值传递,没有引用传递. ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } ... ... //调用该函数 int num = 5; System.out.println(num); changeValue(num); System.out.println(num); ... ... 调用函数changeValue()前后num的值都没有改变. 值传递的过

vue-cli 项目中绝对路径引用的相关资源 npm run build 后 打开页面报404错误

在项目中.通过vue-cli 搭建的项目,npm run dev时,以绝对路径引用的相关资源在npm run build 后,页面打开报相关资源404错误: 解决方法如下: 打开build/utils.js,在图中相应位置加入红框内容,其中值可能会有不同,若不同,自己配置成相应的即可. 原文地址:https://www.cnblogs.com/xzma/p/9162584.html

Java中String的 &quot;引用&quot; 传递

1.来看一段有趣但又让人困惑的代码片段 public static void main(String[] args){ String x = new String("ab"); change(x); System.out.println(x); } public static void change(String x){ x = "cd"; } 打印结果:"ab" 2.这段代码真正做了什么呢?来解释一下这个过程 首先,当字符串"ab&q

在.NET4.5项目中添加HttpClient引用的办法

一. 创建新项目 1. 打开  Microsoft Visual Studio 201 0,然后从 “ 文件 ” 菜单中选择 “ 新建项目 ” .在模板列表中,选择  Visual C#.在该区域下面,选择 “Windows  应用 程序应用 ” ,然后选择 “ 空白应用程序 ” .将该应用程序命名为  winHttpClientBase,然后单击 “ 确定 ” . 2. 添加 Microsoft HTTP Client Libraries 的引用如下图 1 ,图 2 ,图 3 ,图 4 . 图

脑洞大开--一条项目中常用的linux命令引发的经典算法题

小时候家里定了<读者>的月刊,里面记录一个故事:说有有个偏僻的乡村一日突然来了一个美女,她携着万贯家财子女在当地安家落户,成了当地的乡绅.她让她的子女世世代代的保守这个秘密,直到这个秘密不会再对家族带来灾难.她就是陈圆圆.当年吴三桂领清兵入关,冲冠一怒为红颜,改写了中国的历史,自己却能全身而退的那个人. 周五例行公事的查看一下离线数据推送项目的数据和log.将log用awk分段之后,我想知道实时数据前10个被重复发送的数据ID都被重复发送了几次,从而找到进一步优化的入手点,天知道我对这个项目已