本文主要列出一些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. 学习React系列(五)——使性能最优

    提高性能可分为两方面: 一.配置层面 二.代码层面 本文只从代码层面考虑: 一.避免重复渲染 这里要说一句: 当shouldComponentUpdate返回false的时候不触发render函数也就 ...

  2. STL迭代器------Traits编程技法详细理解(一)

    最近在看STL源码解析的迭代器(iterators)一章,涉及到c++ Traits的编程技法,刚开始看时一头雾水,反复看了好几遍之后才理解这个东西,因此来写写在这方面的理解,如有错误,希望读者指正. ...

  3. WPF Command

    使用CustomControl时绑定Command用法 C# Part public static RoutedUICommand ClearCommand { get; private set; } ...

  4. 深入浅出理解 TCP/IP 协议 (一)

    文章转自:https://www.cnblogs.com/onepixel/p/7092302.html TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入 ...

  5. Java学习图形界面+网络编程案例---------网络简易通讯

    主要思想: 主类继承JPanel,在构造方法中将JFrame设成空布局:在其中适当位置添加组件:实现事件监听处理 DATE:2015-10-31 服务器端代码: /** * @author Oyc * ...

  6. No mapping found for HTTP request with URI [/user/login.do] in DispatcherServlet with name 'dispatcher'错误

    1.警告的相关信息 七月 24, 2017 3:53:04 下午 org.springframework.web.servlet.DispatcherServlet noHandlerFound警告: ...

  7. WebRTC 音频采样算法 附完整C++示例代码

    之前有大概介绍了音频采样相关的思路,详情见<简洁明了的插值音频重采样算法例子 (附完整C代码)>. 音频方面的开源项目很多很多. 最知名的莫过于谷歌开源的WebRTC, 其中的音频模块就包 ...

  8. mysql之查询

    #数据准备drop table if exists class;create table class(    class_no int(2) unsigned zerofill primary key ...

  9. ConcurrentHashMap源码分析(1.8)

    0.说明 1.ConcurrentHashMap跟HashMap,HashTable的对比 2.ConcurrentHashMap原理概览 3.ConcurrentHashMap几个重要概念 4.Co ...

  10. Centos常用命令之:搜索

    在linux中,所有的文件都是以目录树的形式存在的.而每个发行版的文件存放之间又会有些差别. 这时候,如果我们想看某个命令或者文档的时候就必须先通过某种方式找到改文档的所在位置. 在linux中提供了 ...