关于Java,那些我心存疑惑的事(不断更新中...)
本文主要列出一些Java常用到确又让大家不怎么注意的问题。
将会不断更新,欢迎关注……
如有觉得不合理之处,欢迎评论交流,没有火花怎么印象深刻?
(1)Java到底是值传递?还是引用传递?
揪出这个问题是因为有同学说开始写博客了,于是他写怎么篇博客:Java到底是值传递?还是引用传递?,说让我看看。
我看完觉得挺合理的,马上给他回复说“不错哦”。合理是合理,但是按照他的说法,那什么不是传值过去啊,都是值传递?
今天早上上班,来得比较早,就百度了一下这个问题,于是又看到了另外一篇文章:Java:按值传递还是按引用传递详细解说,里面评论是各种撕逼。还是没有得到统一答案啊。
后面又看到另外一篇文章:Java中只有按值传递,没有按引用传递!,以及该文章对应的评论。我也有了自己的看法。
对比这些博客以及对应的评论,“在Java里面只有基本类型和按照下面这种定义方式的String是按值传递(就是直接使用双引号定义字符串方式:String str = “小宝鸽”),其它的都是按引用传递。”好像有些道理。
java.lang.String的实例对象一旦创建,它包含的字符序列就不能被改变了。
String传递的也是引用副本的传递,但是因为String为final的,所以和按值传递等同的。
其实按值还是按引用的区别在于“是否在传递的时候进行对象的内存拷贝”,java中基本类型是由于在JVM中存储区域不同于普通对象所以传递前会拷贝,传递的是拷贝后的值,但是对象在传递的时候不拷贝,直接传“引用值”,指向同一片对象堆内存区域。(但是这这句话:其实按值还是按引用的区别在于“是否在传递的时候进行对象的内存拷贝”的正确性仍待考证)
后面,同学说了不应该通过比较几篇博客文章就胡乱得出结论,误人子弟。让我十分惶恐……
后面有看到一些知乎的回答:java到底是值传递还是引用传递?。让我又有了不一样的理解。
不过,根据Horstmann的《java核心技术》(中文第8版P115-P117)的描述,java中是没有引用传递的,原文摘录如下:
”java程序设计语言总是采用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。“
”有些程序员(甚至是本书的作者),认为java程序设计语言对对象采用的是引用调用,实际上这种理解是不对的。”
目前正在看深入Java虚拟机,待了深入了解了jvm的内存的分布结构,再写篇博客给出详细的解释吧。也十分建议猿友们了解一下jvm的内存的分布结构。
如果猿友们有认真看我贴出的其他博主博客,抛开值传递和引用传递的概念,起码知道了什么样的调用,得到什么值。这就已经很不错了。
通过这么一番学习,一方面认识到了,写博客严谨十分重要,免得误人子弟。也深刻认识到自己对jvm的理解不足。另外方面,同上面的一些资料,阅读过程中其实收获还是挺大的, 起码比一开始就给我一个结论“java程序设计语言总是采用值调用”的收获还大些。
不断更新中…….
关于Java,那些我心存疑惑的事(不断更新中...)的更多相关文章
- 《Java并发编程实战》读书笔记(更新中)
一.简介 1.多线程编程要注意的几点: 安全性:永远不发生糟糕的事情 活跃性:某件正确的事情最终会发生(不会发生无限循环或者死锁) 性能:正确的事尽快发生(上下文切换消耗之类的) 二.线程安全 1.为 ...
- Java与C#的语法区别(不断更新中...)
1.static关键字: 在java中静态成员能够被对象和类名调用: 在C#中,静态成员只能被类调用不能被对象调用. 2.for循环: 在java中可以在for前面添加标记,然后在for循环中可以br ...
- Java的一些良好习惯及细节------持续更新中...
1.在做条件判断时,不要将变量放在判断符的左边,这样做可以防止出现空指针异常,以字符串比较为例: String name = "Tom"; //这种方式不推荐,如果变量name为空 ...
- 【Java项目】GUI图形用户界面(不断更新中!)
<目录> 1 创建一个简单的窗体 2 如何进行事件监听 (1) 按钮监听 (2) 键盘监听 (3) 鼠标监听 3 容器 (1) 创建一个简单的对话框 (2) 创建一个简单的模态对话框 (3 ...
- java数据结构——递归(Recursion)例题持续更新中
继续学习数据结构递归,什么是递归呢?字面理解就是先递出去,然后回归,递归核心思想就是直接或间接调用本身,好比从前有座山,山里有位老和尚,在给小和尚讲故事,讲的是从前有座山,山里有位老和尚,在给小和尚讲 ...
- 浅谈Java引用和Threadlocal的那些事
这篇文章主要介绍了Java引用和Threadlocal的那些事,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1 背景 某一天在某一个群里面的某个群友突然提出了一个问 ...
- Java——关于static关键字的那些事总结
前言: 先说说今天为啥要谈这个东西,虽然学Java已经有两年了,但是今天,本着温故而知新的态度,仔细的第三次翻看了<Head Firt Java>这本书,虽然这本书介绍的很多东西都特别基础 ...
- 对《java程序员上班那点事》笔者对数组占用内存质疑
1.<java程序员上班那点事>笔者对数组占用内存的描述 2.实际测试情况: /** * 测试一维数组占用内存 */ public static void testOneArray() { ...
- java解惑之常常忘记的事
java解惑之常常忘记的事 2012-10-17 18:38:57| 分类: JAVA | 标签:基础知识 软件开发 |举报|字号 订阅 针对刚接触java的菜鸟来说,java基础知识 ...
随机推荐
- Node.js+Koa开发微信公众号个人笔记(三)响应文本
响应输入文本和响应事件类似,首先对微信服务器发送来的数据的MsgType进行处理,如果是text,说明是文本,接下来可以对文本内容进行处理,比如用户输入了1,可以给用户回复一个文本或者图文或者视频等信 ...
- scala求交集、并集、差集命令
交集 scala> Set(1,2,3) & Set(2,4)res1: scala.collection.immutable.Set[Int] = Set(2) 并集 scala> ...
- MongoDB系列六(聚合).
一.概念 使用聚合框架可以对集合中的文档进行变换和组合.基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理.这些构件包括筛选(filtering).投射(project ...
- ionic轮播图
根据自带的滑动图,只需要添加加红字体 <ion-view view-title="活动详情" class="align-title-center"> ...
- [LeetCode] 01 Matrix 零一矩阵
Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell. The distance b ...
- Python系列之 - 上下文管理协议
with obj as f: '代码块' 1.with obj ---->触发obj.__enter__(),拿到返回值 2.as f----->f=返回值. 3.with obj as ...
- [USACO12JAN]爬山Mountain Climbing
题目描述 Farmer John has discovered that his cows produce higher quality milk when they are subject to s ...
- hdu 2243 考研路茫茫——单词情结(AC自动+矩阵)
考研路茫茫——单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- bzoj2338[HNOI2011]数矩形 计算几何
2338: [HNOI2011]数矩形 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1535 Solved: 693[Submit][Status ...
- Mysql 基于GTID的主从复制(实操)
实现环境: Master 主:192.168.0.102 (Mysql 5.6.36) Slave 从 :192.168.0.103 (Mysql 5.6.36) 步骤1.在主DB服务器上建立复制账 ...