Java是一門面向對象的編程語言,在進行對象實例化的時候,有兩種方式可以創建對象:直接賦值和使用new關鍵字。
直接賦值方式創建對象時,需要使用現有對象的引用來指向該對象,這意味著新對象與原對象共享同一個內存空間。例如:
String str1 = "hello"; String str2 = str1;
在這個例子中,str1對象和str2對象實際上指向的是同一個內存地址中的字符串"hello"。如果改變其中一個對象的值,另一個對象的值也會同時改變。
使用new關鍵字方式創建對象時,會在堆內存中為該對象分配一塊新的內存空間,對象實例化后使用該對象的引用來引用堆內存中的新對象。例如:
String str1 = new String("hello"); String str2 = new String("hello");
在這個例子中,str1對象和str2對象實際上指向的是兩個不同的內存地址中的字符串"hello"。如果改變其中一個對象的值,另一個對象的值不會受到影響。
直接賦值方式創建對象適用于基本數據類型和不可變對象,因為對于這些類型的對象,共享同一個內存空間不會產生副作用。而使用new關鍵字方式創建對象適用于可變對象,因為可變對象在多線程環境下并發訪問可能會產生線程安全問題。