本文主要列出一些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,那些我心存疑惑的事(不断更新中...)的更多相关文章

  1. 《Java并发编程实战》读书笔记(更新中)

    一.简介 1.多线程编程要注意的几点: 安全性:永远不发生糟糕的事情 活跃性:某件正确的事情最终会发生(不会发生无限循环或者死锁) 性能:正确的事尽快发生(上下文切换消耗之类的) 二.线程安全 1.为 ...

  2. Java与C#的语法区别(不断更新中...)

    1.static关键字: 在java中静态成员能够被对象和类名调用: 在C#中,静态成员只能被类调用不能被对象调用. 2.for循环: 在java中可以在for前面添加标记,然后在for循环中可以br ...

  3. Java的一些良好习惯及细节------持续更新中...

    1.在做条件判断时,不要将变量放在判断符的左边,这样做可以防止出现空指针异常,以字符串比较为例: String name = "Tom"; //这种方式不推荐,如果变量name为空 ...

  4. 【Java项目】GUI图形用户界面(不断更新中!)

    <目录> 1 创建一个简单的窗体 2 如何进行事件监听 (1) 按钮监听 (2) 键盘监听 (3) 鼠标监听 3 容器 (1) 创建一个简单的对话框 (2) 创建一个简单的模态对话框 (3 ...

  5. java数据结构——递归(Recursion)例题持续更新中

    继续学习数据结构递归,什么是递归呢?字面理解就是先递出去,然后回归,递归核心思想就是直接或间接调用本身,好比从前有座山,山里有位老和尚,在给小和尚讲故事,讲的是从前有座山,山里有位老和尚,在给小和尚讲 ...

  6. 浅谈Java引用和Threadlocal的那些事

      这篇文章主要介绍了Java引用和Threadlocal的那些事,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1 背景 某一天在某一个群里面的某个群友突然提出了一个问 ...

  7. Java——关于static关键字的那些事总结

    前言: 先说说今天为啥要谈这个东西,虽然学Java已经有两年了,但是今天,本着温故而知新的态度,仔细的第三次翻看了<Head Firt Java>这本书,虽然这本书介绍的很多东西都特别基础 ...

  8. 对《java程序员上班那点事》笔者对数组占用内存质疑

    1.<java程序员上班那点事>笔者对数组占用内存的描述 2.实际测试情况: /** * 测试一维数组占用内存 */ public static void testOneArray() { ...

  9. java解惑之常常忘记的事

    java解惑之常常忘记的事 2012-10-17 18:38:57|  分类: JAVA |  标签:基础知识  软件开发  |举报|字号 订阅     针对刚接触java的菜鸟来说,java基础知识 ...

随机推荐

  1. PHP 页面跳转到另一个页面的多种方法方法总结

    如何在PHP中从一个页面重定向到另外一个页面呢?这里列出了三种办法,供参考. 一.用HTTP头信息 也就是用PHP的HEADER函数.PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定 ...

  2. js通过class获取元素时的兼容性解决方案

    1:::::方法代码如下:function getByClass(sClass){    var aResult=[];    var aEle=document.getElementsByTagNa ...

  3. CentOS下实用的网络管理工具

    昨天在家把在家待业的笔记本装上了CentOS 7最小版本,今天拿到公司发现没法改Wifi链接,在解决的过程中发现了一个TUI工具非常好用,在此分享给大家. 1. 安装 sudo yum install ...

  4. CentOS 7 源码编译安装MySQL 5.7.14

    一.添加用户和组 1. 进入root: su 2. 添加组: groupadd mysql 3. 添加用户: useradd -r -g mysql -s /bin/false mysql 二.安装 ...

  5. Oracle数据库基础练习题

    --1.查询和SMITH相同部门的员工姓名和雇用日期select ename,hiredate from emp where deptno=(select deptno from emp where ...

  6. 顺序或者说优先级的重要性---解决dom生成问题有感

    我们的大脑有逻辑,程序也有逻辑,只要一切都刚刚好,那么我们大脑的逻辑和程序的逻辑是没有冲突的:但是,有时候,我们想当然,只顾自己头脑中的逻辑,而随意臆想程序的逻辑,这个时候,就会有很多我们觉得不可思议 ...

  7. Python更新pip出现错误解决方法

    Python更新pip出现错误解决方法 更新pip python -m pip install --upgrade pip 查看时报错 解决方法 在命令栏(即win+r)输入:easy_install ...

  8. javascript的基础(2)--数据类型介绍

    1. number数据类型 所有的数字都是Number数据类型 利用typeof运算符可以返回当前数据的数据类型 特殊值:NaN not a number 不是一个数字 注意 :小数的计算可能产生丢失 ...

  9. [NOI 2014]起床困难综合症

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

  10. Go学习——defer、panic

    defer: 延迟到ret之前,通常用于IO的关闭 or 错误处理. 在延迟出现的异常可以被后面的捕捉,但是只有最后一个. defer可以多次,这样形成一个defer栈,后defer的语句在函数返回时 ...