本文主要列出一些Java常用到確又讓大家不怎么注意的問題。
將會不斷更新,歡迎關注……
如有覺得不合理之處,歡迎評論交流,沒有火花怎么印象深刻?
(1)Java到底是值傳遞?還是引用傳遞?
揪出這個問題是因為有同學說開始寫博客了,于是他寫怎么篇博客:[Java到底是值傳遞?還是引用傳遞?](http://blog.csdn.net/xiaosha009/article/details/50680199#comments),說讓我看看。
我看完覺得挺合理的,馬上給他回復說“不錯哦”。合理是合理,但是按照他的說法,那什么不是傳值過去啊,都是值傳遞?
今天早上上班,來得比較早,就百度了一下這個問題,于是又看到了另外一篇文章:[Java:按值傳遞還是按引用傳遞詳細解說](http://blog.csdn.net/zzp_403184692/article/details/8184751),里面評論是各種撕逼。還是沒有得到統一答案啊。
后面又看到另外一篇文章:[Java中只有按值傳遞,沒有按引用傳遞!](http://guhanjie.iteye.com/blog/1683637),以及該文章對應的評論。我也有了自己的看法。
對比這些博客以及對應的評論,“在Java里面只有基本類型和按照下面這種定義方式的String是按值傳遞(就是直接使用雙引號定義字符串方式:String str = “小寶鴿”),其它的都是按引用傳遞。”好像有些道理。
java.lang.String的實例對象一旦創建,它包含的字符序列就不能被改變了。
String傳遞的也是引用副本的傳遞,但是因為String為final的,所以和按值傳遞等同的。
其實按值還是按引用的區別在于“是否在傳遞的時候進行對象的內存拷貝”,java中基本類型是由于在JVM中存儲區域不同于普通對象所以傳遞前會拷貝,傳遞的是拷貝后的值,但是對象在傳遞的時候不拷貝,直接傳“引用值”,指向同一片對象堆內存區域。(但是這這句話:其實按值還是按引用的區別在于“是否在傳遞的時候進行對象的內存拷貝”的正確性仍待考證)
后面,同學說了不應該通過比較幾篇博客文章就胡亂得出結論,誤人子弟。讓我十分惶恐……
后面有看到一些知乎的回答:[java到底是值傳遞還是引用傳遞?](https://www.zhihu.com/question/31203609)。讓我又有了不一樣的理解。
不過,根據Horstmann的《java核心技術》(中文第8版P115-P117)的描述,java中是沒有引用傳遞的,原文摘錄如下:
”java程序設計語言總是采用值調用。也就是說,方法得到的是所有參數值的一個拷貝,特別是,方法不能修改傳遞給它的任何參數變量的內容。“
”有些程序員(甚至是本書的作者),認為java程序設計語言對對象采用的是引用調用,實際上這種理解是不對的。”
目前正在看深入Java虛擬機,待了深入了解了jvm的內存的分布結構,再寫篇博客給出詳細的解釋吧。也十分建議猿友們了解一下jvm的內存的分布結構。
如果猿友們有認真看我貼出的其他博主博客,拋開值傳遞和引用傳遞的概念,起碼知道了什么樣的調用,得到什么值。這就已經很不錯了。
通過這么一番學習,一方面認識到了,寫博客嚴謹十分重要,免得誤人子弟。也深刻認識到自己對jvm的理解不足。另外方面,同上面的一些資料,閱讀過程中其實收獲還是挺大的, 起碼比一開始就給我一個結論“java程序設計語言總是采用值調用”的收獲還大些。
### 不斷更新中…….
- 前言
- Java生成中間logo的二維碼(還可以加上二維碼名稱哦)
- Java我的高效編程之常用函數
- AES加密解密&&SHA1、SHA加密&&MD5加密
- Java中synchronized的使用實例
- Java基礎之集合
- Java基礎之泛型
- Java基礎之枚舉妙用
- 那些年用過的一些前端框架
- 關于正則,那些年一直存在的疑惑解答(正則菜鳥不容錯過)
- 給pdf文件添加防偽水印logo(附工程源碼下載)
- SpringMVC+BUI實現文件上傳(附詳解,源碼下載)
- Java異常封裝(自己定義錯誤碼和描述,附源碼)
- javaweb異常提示信息統一處理(使用springmvc,附源碼)
- 關于Java,那些我心存疑惑的事(不斷更新中...)
- 深入Java虛擬機(1)——Java體系結構
- 深入Java虛擬機(2)——Java的平臺無關性
- 深入Java虛擬機(3)——安全
- 深入Java虛擬機(4)——網絡移動性
- Linux文件編輯命令詳細整理
- 阿里云服務器云數據庫免費體驗(Java Web詳細實例)
- 項目部署、配置、查錯常用到的Linux命令
- Shell腳本了解
- Ajax原理學習
- linux下安裝apache(httpd-2.4.3版本)各種坑
- JSP九大內置對象
- Servlet再度學習
- 開發人員系統功能設計常用辦公軟件分享
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener問題解決
- tomcat內存溢出解決,java.lang.OutOfMemoryError: PermGen space
- 《Java多線程編程核心技術》推薦
- 關于跳槽,是我心浮氣躁?還是我確實該離開了?
- Java I/O學習(附實例和詳解)
- Java經典設計模式之五大創建型模式(附實例和詳解)
- Java經典設計模式之七大結構型模式(附實例和詳解)
- Java經典設計模式之十一種行為型模式(附實例和詳解)
- Java內存管理
- SQL實例整理
- 數據庫面試常問的一些基本概念