值傳遞引用傳遞 threadLocal

一個方法傳遞基本類型參數 String都是值傳遞

傳遞對象 數組都是引用傳遞

參數爲引用對象(重要):
public class StackTest {
    public static void main(String[] args) {
        StringBuilder sb1 = new StringBuilder("Jack Ma");
        StringBuilder sb2 = new StringBuilder("Architect Gong");
        changeStr(sb1, sb2);
        System.out.println("sb1:" + sb1);
        System.out.println("sb2:" + sb2);
    }

    // 參數sb1, sb2 爲引用數據類型
    private static void changeStr(StringBuilder sb1, StringBuilder sb2) {
        sb1.append("  -  風~");
        sb2 = sb1;
        sb2.append(" 沒有方向的吹來~");
    }
}

運行得到結果

sb1:Jack Ma - 風~ 沒有方向的吹來~

sb2:Architect Gong

在這裏插入圖片描述

SyslogUtils.ii(syslogOriginalNetwork);
public static void ii(SyslogOriginalNetwork syslogOriginalNetwork) {
    syslogOriginalNetwork.setMethod("ss");
}

沒報錯,是因爲靜態方法沒有直接去操作靜態域!!syslogOriginalNetwork是一個新對象,最後實例中傳入的是引用!!

內存分配:new()出來的對象,內存分配與堆中,方法存在於棧中 引用存在棧中!!!!!!!
靜態方法static(類方法)和 非靜態方法(實例方法)
如果把threadLocal聲明爲非靜態,則在類A的每個實例中都會產生一個新對象,這是毫無意義的,只是增加了內存消耗!!

 

此時區分數據類型:基本類型和引用類型

基本類型:值存放在局部變量表中,無論如何修改只會修改當前棧幀的值,方法執行結束對方法外不會做任何改變;此時需要改變外層的變量,必須返回主動賦值。

引用數據類型:指針存放在局部變量表中,調用方法的時候,副本引用壓棧,賦值僅改變副本的引用。但是如果直接改變副本引用的值,修改了引用地址的對象,此時方法以外的引用此地址對象當然被修改。(兩個引用,同一個地址,任何修改行爲2個引用同時生效)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章