java給對象賦值

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 21:09
下一篇 2024-11-26 21:09

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論