前两天写了一个递归,因为太年轻,把一个递归方法需要用到的list定义该递归方法外了,结果开始断点测试的时候有点小问题 ,然后上线之后因为数据量太多导致了一个java.util.ConcurrentModificationException异常,然后就debug。然后一顿操作因为单元测试的时候马虎出了点问题,以为新写的方法有问题,然后又一顿操作才发现在单元测试出了问题。最后成功解决问题,提交之后领导给我说:“你这个递归看起来还有问题哦?”,然后我心里一凉。然后领导再问:“你这个是值传递还是引用传递啊”我心中大惊,虽然我是一个新手,但是我看了几篇文章说java只有值传递的呀,但是大佬这么问我,我也不敢回答,害怕的一匹。然后偷偷查阅资料冷静分析java值传递还是引用传递。

先总结:

java中方法参数传递方式是按值传递。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

因为在平常使用中,我们在传递一个对象之后并不会在new一次该对象,如下图第三行所示,

所以方法内的对象和方法外的对象所指的内存是同一个地址(对象和list存放在堆中,方法内的数据存放在栈帧中,栈帧属于某个方法所有,方法结束后就销毁,而堆属于类),如果我们在方法内修改了该对象,在外面获取该对象也会改变,所以会被误认为是应用传递。如果在操作之前new一下,方法的对象指向和传递过来的对象指向就不是同一个地址了,所以我们在方法里面 操作了对象,方法外的对象也不会改变。如下图

那么问题来了,string类型是一个引用类型,然而我们操作他的时候和基础类是一样的,并没有引用传递的那种幻觉是为什么呢?

因为string不是基础类,它比较特殊,它是不可变类,每次我们操作它的时候就相当于new了一次。

其实会在java值传递和引用传递上不清楚的原因是基础不牢固。基础不牢固有两重一次,第一重是学的不牢固。第二重是基础原理(不懂jvm)不牢固。所以路漫漫其修远兮,吾将上下而求索呀。

如果想要详情了解值传递,就看下面这个文章,写的挺不错的。

https://blog.csdn.net/bntx2jsqfehy7/article/details/83508006

一个随意list引发的惨案(java到底是值传递还是引用 传递?)的更多相关文章

  1. Java 到底是值传递还是引用传递?

    关于这个问题,引发过很多广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解的是错误的.还有的人可能知道Java中的参数传递是值传递,但是说不出来为什么. 在开始深入讲解之前,有必要 ...

  2. java参数传递时到底是值传递还是引用传递

    java参数传递时到底是值传递还是引用传递(baidu搜集) 问”,很多人的BLOG里都引用这些面试题,最近因为工作内容比较枯燥,也来看看这些试题以调节一下口味,其中有一道题让我很费解. 原题是:当一 ...

  3. Java 到底是值传递还是引用传递

    作者:Intopass链接:https://www.zhihu.com/question/31203609/answer/50992895来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  4. Java调用函数传递参数到底是值传递还是引用传递

    今天翻看微信上有关Java技术的公众号时,看到了一篇关于Java中值传递的问题,文章讨论了在Java中调用函数进行传参的时候到底是值传递还是引用传递这个面试时会问到的问题.之前也接触过类似的问题,但只 ...

  5. Java中到底是值传递还是引用传递?

    Java中到底是值传递还是引用传递? 我们先回顾一下基本概念 实参和形参 参数在编程语言中是执行程序需要的数据,这个数据一般保存在变量中.在Java中定义一个方法时,可以定义一些参数, 举个例子: p ...

  6. 188W+程序员关注过的问题:Java到底是值传递还是引用传递?

    在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很多的程序员被这个 ...

  7. [转帖]Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?

    Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递? http://www.itpub.net/2019/12/03/4567/   在逛 Stack Overfl ...

  8. JAVA方法中参数到底是值传递还是引用传递

    当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递? 答:是值传递.Java 语言的参数传递只有值传递.当一个实例对象作为参数被传递到方法中时,参 ...

  9. 面试官:兄弟,说说Java到底是值传递还是引用传递

    二哥,好久没更新面试官系列的文章了啊,真的是把我等着急了,所以特意过来催催.我最近一段时间在找工作,能从二哥的文章中学到一点就多一点信心啊! 说句实在话,离读者 trust you 发给我这段信息已经 ...

随机推荐

  1. hdu-6644 11 Dimensions

    题目链接 11 Dimensions Problem Description 11 Dimensions is a cute contestant being talented in math. On ...

  2. POJ-3686 The Windy's KM算法 拆点题

    参考:https://blog.csdn.net/sr_19930829/article/details/40680053 题意: 有n个订单,m个工厂,第i个订单在第j个工厂生产的时间为t[i][j ...

  3. LuoGuP1516 青蛙的约会 + 同余方程 拓展欧几里得

    题意:有两只青蛙,在一个圆上顺时针跳,问最少的相遇时间.   这个是同余方程的思路.可列出方程:(m-n)* X% L = y-x(mod L) 简化为 a * x = b (mod L)    (1 ...

  4. 求大的组合数模板 利用Lucas定理

    Lucas定理:A.B是非负整数,p是质数.A B写成p进制:A=a[n]a[n-1]…a[0],B=b[n]b[n-1]…b[0]. 则组合数C(A,B)与C(a[n],b[n])C(a[n-1], ...

  5. POJ-2387 Til the Cows Come Home ( 最短路 )

    题目链接: http://poj.org/problem?id=2387 Description Bessie is out in the field and wants to get back to ...

  6. ACM-ICPC 2017 Asia Urumqi:A. Coins(DP) 组合数学

    Alice and Bob are playing a simple game. They line up a row of nn identical coins, all with the head ...

  7. CF985B Switches and Lamps 思维 第十九

    Switches and Lamps time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  8. vue2.0 创建项目

    准备 安装淘宝 npm镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org 添加系统变量path的内容 因为cnpm会被安 ...

  9. 渗透之路基础 -- 服务端请求伪造SSRF

    简介:SSRF 服务器端请求伪造,有的大型网站在web应用上提供了从其他服务器获取数据的功能.使用户指定的URL web应用获取图片,下载文件,读取文件内容.通常用于控制web进而探测内网服务以及攻击 ...

  10. android 之下拉刷新

    一.概述 Android 下拉刷新几乎是每个应用都必带的功能, 并且现在下拉刷新第三方库也越来越多了,很方便就能实现该功能, 下面我介绍一下 自己常用的几个方法. 二.例子 第一种方式:就是集成Lis ...