本文目錄一覽:
Java中請問將一個對象賦值給另一個同類對象,這兩個對象是否指向同一堆內存?
是的。
對象是引用類型的,所以如果把一個對象賦值給另一個變量,它實際上只是把內存地址賦值了。也就是說,如果對象都是同一地址,那麼改變該地址的值,另外一個同地址的對象也會改變。
首先可以使用構造器的參數區別開兩個對象,如果要直接賦值而不互相影響,那麼可以使用clone(淺複製、深複製包含內部引用等)方法如Person newPerson=(Person)oldPerson.clone();這樣新舊對象是2個對象而不是共用一個地址的2個對象。
堆和棧
內存管理在Java語言中是JVM自動操作的,當JVM發現某些對象不再需要的時候,就會對該對象佔用的內存進行重分配(釋放)操作,而且使得分配出來的內存能夠提供給所需要的對象。
在一些編程語言裏面,內存管理是一個程序的職責,但是書寫過C++的程序員很清楚,如果該程序需要自己來書寫很有可能引起很嚴重的錯誤或者說不可預料的程序行為,最終大部分開發時間都花在了調試這種程序以及修復相關錯誤上。
以上內容參考:百度百科-java內存模型
JAVA關於對象的賦值、方法幾個問題
大略看
public class 對象 {
int i = 1;
public void 成員方法(){
System.out.println("調用了成員方法");
}
public 對象() {
}
public String toString(){
return "這是\"對象\"的實例";
}
public static void main(String[] args) {
對象 t1 = new 對象();
對象 t2 = new 對象();
//對象 t3 = t1.成員方法; //~~~ 錯誤,成員方法()是無返回值的
//t2.i; //~~~ 錯誤,i是變量,不是方法,不能做語句
t1.i = 2;
System.out.println(t1); //輸出結果:對象@15db9742
//添加了toString(),輸出就不一樣了
System.out.println(t1.i); //輸出結果:2
}
}
一個java類對象賦初值的簡單問題,請教!
定義一個隨機文件流,後面有用到的,文件讀取的
它在後面還是創建了實例 inout=new RandomAccessFile(f,"rw");前面賦值null只是定義而已。你可以寫成RandomAccessFile inout = new RandomAccessFile(new File("F:\\","123.txt"));
輸入流FileInputStream和輸出流 FileOutputStream,實現的是對磁盤文件的順序讀寫,而且讀寫要分別創建不同對象。相比之下RandomAccessFile類則可對文件實現隨機讀寫操作。
RandomAccessFile對象的文件位置指針遵循下面的規律:
•新建RandomAccessFile對象的文件位置指針位於文件的開頭處;
•每次讀寫操作之後,文件位置的指針都相應後移到讀寫的位元組數;
•可以通過getFilePointer方法來獲得文件位置指針的位置,通過seek方法來設置文件指針的位置。
RandomAccessFile常用方法:
skipBytes(long i):從前往後撥弄指示器的位置,就是跳過多少個位元組讀取數據。
Void seek(long p): 對指示器作決定性的定位,用於從後往前撥弄指示器的位置。對於seek方法,擁有skipBytes( )的功能,但seek( )在使用過程非常影響系統的開銷。只有萬不得已的情況下使用。
關於java賦值
這個得從Java的空間分配說起,Java將內存空間分為堆和棧。
比如一個語句:
String str1;
此時只會在堆開一個空間,存的是null,將來用來存對象的地址;
str1="Hello World";(等價於str1=new String("Hello World");)
此時會在棧生成對象"Hello World",並將該對象的地址賦給變量str1。
String str2;
str2=str1;
這句話只是把str1的值(為"Hello World"對象的地址)賦給變量str2,即str2也指向了對象"Hello World"。
你在程序里一開始創建了兩個對象,這裡記成「11」、「22」,n1和n2分別存儲他們的地址。
n1=n2,簡單賦值操作,相當於把n2存的地址傳給了n1,即n1和n2同時指向了「22」,此時對象「11」已經沒有任何引用指向它,你在程序中是無法使用它的,它將會被JVM回收(這是Java的垃圾回收機制)。
n1.i=33; 這是對對象「22」進行操作。
其實這裡的n1和n2可以理解為C語言里的指針,只是它不允許對內存地址進行加減運算。
還不懂的話可以看這張圖片
?關於java賦值.JPG_73dtl0bsht0bs2bsp0cm0clnool2bp0bs0c0bt0c1bu0u12f03z
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/186003.html