一堕义、=的含義
????假設(shè)有兩個基本變量稠肘,一個是lhs,另一個是rhs,它們分別表示左側(cè)(left-hand side) 和右側(cè)(right-hand side)那么賦值語句:
lhs = rhs缘厢;? ? ?的含義是:將存儲在rhs中的值復(fù)制到基本變量lhs。隨后lhs或rhs的變化并不影響rhs或 lhs须喂。
????對于對象,=的含義是一樣的:將存儲值復(fù)制趁蕊。如果lhs和rhs是引用(兼容類型)坞生,那 么在賦值語句之后,lhs和rhs將指向相同的對象掷伙。在此是己,只是復(fù)制地址。lhs指向的對象是 lhs不再引用的對象炎咖。如果lhs是該對象的唯一引用赃泡,那么該對象現(xiàn)在沒有任何引用,要進行垃圾回收乘盼。注意升熊,并不復(fù)制對象,只復(fù)制對象的引用绸栅。
二级野、實際代碼測試
? ? 基本類型變量况鸣,賦值時是值的復(fù)制牢贸,賦值后,改變左右一方的值镐捧,對另一方?jīng)]有影響潜索。
????引用類型變量,賦值時是把=右邊的地址復(fù)制懂酱,左右指向同一地址竹习,改變其中一值時,改變的是值列牺,地址并沒有改變整陌,所以雙方都有影響。
? ??String 是引用類型瞎领,參數(shù)傳遞是引用傳遞泌辫,但參數(shù)改變,并不影響原地址所指向的值發(fā)生變化九默,因為參數(shù)改變甥郑,只是改變了引用,并沒有改變傳遞進來的引用所指向的值荤西。
三澜搅、關(guān)于引用
? ?? 在Java中,除了基本類型外, 所有其他類型都是引用類型邪锌,這些引用類型包括字符串勉躺、數(shù)組和文件流。 在Java中引用變量(經(jīng)趁俜幔縮寫引用)是一個變量饵溅,它用來存儲對象所在的內(nèi)存地址。
? ? 有兩個對象(見下圖)妇萄,j在內(nèi)存中的存儲位置分別是1000和1024蜕企。對這兩個對象,有三個引用變量:points冠句、point2和 point3轻掩。 point 1和point3都引用存儲在內(nèi)存位置1000的對象;point2引用存儲在內(nèi)存位置 1024的對象懦底。point 1和point3的存儲值是1000,? point2的存儲值是1024唇牧。像1000 和1024這樣的實際位置,都是系統(tǒng)運行時根據(jù)自身的判斷進行分配的(當(dāng)系統(tǒng)發(fā)現(xiàn)可用內(nèi)存時)。因此丐重,在外部不能像使用數(shù)一樣使用這些值腔召。不過,point1和point3存儲相同值這 一事實是非常有用的:這意味著它們引用了同一個對象扮惦。j
? ??通過將point2的存儲值賦值給point3,使point3 所引用的對象與point2的引用對象相同(見下圖)⊙旅郏現(xiàn)在point2==point3的值為true,因為point2和point3都儲存在1024這個內(nèi)存地址中掺栅,從而引用了相同的對象。point1 ! = point2也是true, 因為point1和point2引用不同的對象纳猪。
參考文章《數(shù)據(jù)結(jié)構(gòu)與問題求解(Java語言版)(第4版)》