最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Java 數(shù)組內(nèi)存分配的相關(guān)問題

 更新時間:2013年05月21日 15:18:56   作者:  
本篇文章是對Java中數(shù)組內(nèi)存分配進行了詳細的分析介紹,需要的朋友參考下

可能Java 數(shù)組大家都很熟悉,最近我遇到了一個關(guān)于Java 數(shù)組內(nèi)存分配的問題。
呵呵。突然就發(fā)現(xiàn)許多書上“基本數(shù)據(jù)類型存儲在棧內(nèi)存當中,對象則保存在堆內(nèi)存”這句話完全是錯誤的。下面是個簡單的例子代碼:

復制代碼 代碼如下:

public class Test {
    public static void main(String[] argv) {
// 靜態(tài)初始化數(shù)組
String[] names = { "Michael", "Orson", "Andrew" };
// 動態(tài)初始化數(shù)組
String[] animal = new String[4];
// 讓animal 指向 namens 數(shù)組所引用的數(shù)組
names = animal;

System.out.println(names.length);
System.out.println(animal.length);
    }
}


“Java 數(shù)組大小是不能改變的”這可能大家都聽過,那上面這段代碼就有問題了,animal [] 長度為4,而names [] 數(shù)組的長度只有3,但是經(jīng)過一個賦值語句,兩個數(shù)組的大小就都變?yōu)?了。這不是改變了數(shù)組的大小嗎? 問題就這樣擋在面前了!好吧,問問技術(shù)前輩吧,就這樣對數(shù)組的存儲方式有了全新的認識。下面是我的一點理解:(如果有錯誤的,剛好被大神你看到了,也請你能夠指出來。)
上面的的 names 和 animal 不代表這個數(shù)組對象,而僅僅是數(shù)組的變量而已,和C里面的指針是一樣的,這樣的變量叫做引用變量。數(shù)組對象是保存在堆內(nèi)存當中,大小當然是不能改變的,但是數(shù)組變量卻能夠指向其他的數(shù)組對象,可以看看下面這個圖:

藍虛線是賦值語句 names = animal; 之前 names 和 animal 數(shù)組變量指向的堆內(nèi)存當中數(shù)組對象; 紅線是是賦值語句 names = animal;之后 names 和 animal 數(shù)組變量都同時指向一個數(shù)組對象。當然這時候 Java 垃圾回收機制這時候就會發(fā)現(xiàn)那個沒人引用的數(shù)組對象然后把它帶走。 從上面還可以看到,“Michael”,"Orson","Andrew" 這些都是基本的數(shù)據(jù)類型吧。但是他們卻存儲在堆內(nèi)存當中。  實際上應該這樣說:局部變量放在棧內(nèi)存當中,(像上面的 names[],animal[] 這種引用類型的變量,還有一些基本類型的變量),但應用變量所引用的對象是保存是堆內(nèi)存當中的。(包括數(shù)組還有一些我們平常寫的普通的類對象)Java在堆內(nèi)存當中的對象通常是不允許直接訪問的,但你可以想到直接訪問的后果。為了訪問堆內(nèi)存當中的對象,這時候就需要引用變量這個中介。什么時候Java存儲在棧內(nèi)存中的變量是僅僅是引用變量? 什么時候它又換了身份變?yōu)樨浾鎯r實的JAVA對象納?嗯,看看下面這個例子:
復制代碼 代碼如下:

public class Animal {
private String name;
private int age;Animal(String name, int age) {
    this.name = name;
    this.age = age;
}public void info() {
    System.out.println(name + " " + age);
}
    }
public class Test {    public static void main(String[] argv) {
// 動態(tài)初始化數(shù)組
Animal[] animal = new Animal[2];
Animal cat = new Animal("cat", 1);
Animal dog = new Animal("dog", 2);
animal[0] = dog;
animal[1] = cat;// 當數(shù)組變量引用對象的方法(或者屬性)的時候,它就變?yōu)閷嶋H的Java 對象
System.out.println(animal.length);
//dog 這個原本存儲在棧內(nèi)存當中的對象引用通過調(diào)用對象的方法變?yōu)閷嶋H的對象
dog.info();
animal[0].info();
    }
}

只有當棧內(nèi)存中的引用變量調(diào)用了對象的方法或者是指向了對象的屬性的時候,它就從變量真正成了對象了。(比如上面例子中的 cat,dog 對象引用變量,animal[]數(shù)組變量)。       通過animal[0] = dog;
animal[1] = cat;       使得兩個變量都指向了存儲在堆內(nèi)存當中的對象,所以他們倆個打印出來的信息是一模一樣的.

上圖中藍線是賦值語句:        animal[0] = dog;
animal[1] = cat;          之前的變量指向的狀態(tài),紅虛線是賦值語句之后的狀態(tài),animal[0]和dog ,animal[1] 和cat 所指向的都是相同的堆內(nèi)存空間。

相關(guān)文章

  • java實現(xiàn)6種字符串數(shù)組的排序(String array sort)

    java實現(xiàn)6種字符串數(shù)組的排序(String array sort)

    這篇文章主要介紹了java實現(xiàn)6種字符串數(shù)組的排序(String array sort),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • java執(zhí)行windows下cmd命令的方法

    java執(zhí)行windows下cmd命令的方法

    這篇文章主要介紹了java執(zhí)行windows下cmd命令的方法,較為詳細的說明了Java執(zhí)行Windows下CMD命令的方法,并總結(jié)了常用的CMD命令供大家參考,需要的朋友可以參考下
    2014-11-11
  • Hibernate之CRUD操作實踐

    Hibernate之CRUD操作實踐

    這篇文章主要介紹了Hibernate之CRUD操作實踐,本文主要告訴讀者Hibernate是什么,為什么要使用HibernateHibernate的優(yōu)缺點,Hibernate的基礎(chǔ)實例應用。需要的朋友可以參考下
    2018-11-11
  • MyBatis攔截器實現(xiàn)分頁功能實例

    MyBatis攔截器實現(xiàn)分頁功能實例

    本篇文章主要介紹了MyBatis攔截器實現(xiàn)分頁功能實例,這里整理了詳細的代碼,有需要的小伙伴可以參考下。
    2017-04-04
  • Springboot整合Socket實現(xiàn)單點發(fā)送,廣播群發(fā),1對1,1對多實戰(zhàn)

    Springboot整合Socket實現(xiàn)單點發(fā)送,廣播群發(fā),1對1,1對多實戰(zhàn)

    本文主要介紹了Springboot整合Socket實現(xiàn)單點發(fā)送,廣播群發(fā),1對1,1對多實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 基于java實現(xiàn)簡單的圖片類別識別

    基于java實現(xiàn)簡單的圖片類別識別

    這篇文章主要為大家詳細介紹了如何基于java實現(xiàn)簡單的圖片類別識別功能,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • 使用json字符串插入節(jié)點或者覆蓋節(jié)點

    使用json字符串插入節(jié)點或者覆蓋節(jié)點

    這篇文章主要介紹了使用json字符串插入節(jié)點或者覆蓋節(jié)點的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring Boot編寫攔截器教程實例解析

    Spring Boot編寫攔截器教程實例解析

    這篇文章主要介紹了Spring Boot編寫攔截器教程實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 基于Eclipse 的JSP/Servlet的開發(fā)環(huán)境的搭建(圖文)

    基于Eclipse 的JSP/Servlet的開發(fā)環(huán)境的搭建(圖文)

    本文將會詳細地展示如何搭建JSP的開發(fā)環(huán)境。本次教程使用的是最新版的Eclipse 2018-09編輯器和最新版的Apache Tomcat v9.0,步驟詳細,內(nèi)容詳盡,適合零基礎(chǔ)學者作為學習參考
    2018-12-12
  • 使用Springboot整合Apollo配置中心

    使用Springboot整合Apollo配置中心

    這篇文章主要介紹了使用Springboot整合Apollo配置中心的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論

泾川县| 五台县| 津南区| 兴城市| 尉氏县| 茌平县| 乡宁县| 甘洛县| 高密市| 五寨县| 时尚| 荆门市| 环江| 肇东市| 廉江市| 定结县| 县级市| 濉溪县| 屏南县| 孟州市| 临沧市| 霍城县| 肃宁县| 宁南县| 五台县| 波密县| 临沂市| 遂昌县| 木里| 松阳县| 贵阳市| 淮北市| 确山县| 韩城市| 漳平市| 比如县| 青州市| 固始县| 台山市| 永兴县| 黄大仙区|