亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java數組的一維和二維講解和內存顯示圖

 更新時間:2023年05月08日 11:12:33   作者:tq02  
這篇文章主要介紹了Java數組的一維和二維講解和內存顯示圖,數組就相當于一個容器,存放相同類型數據的容器。而數組的本質上就是讓我們能 "批量" 創(chuàng)建相同類型的變量,需要的朋友可以參考下

一.數組的認識

在C語言里,我們也曾學習過數組,數組是什么?數組就相當于一個容器,存放相同類型數據的容器。而數組的本質上就是讓我們能 "批量" 創(chuàng)建相同類型的變量。

注:容器是固定了大小的,不可改變的那種,例如:礦泉水瓶子、汽油罐、衣柜等容量大小不一的容器。

二.一維數組的用法

2.1 數組的創(chuàng)建

數組的初始化有2種形式

1、靜態(tài)初始化(固定內容)

2、動態(tài)初始化(固定長度)

靜態(tài)初始化:指在數組聲明的同時,直接給數組引用賦值 ,不需要申明長度數據類型[ ]數組名稱 = new 數據類型 [ ]{ 初始化數據 };

示例:int[ ]arr = new int[ ]{1, 2, 3};

省略方式:數據類型 [ ] 數組名稱 = { 初始化數據 }; 示例:int [ ]arr = {1, 2, 3};

注:省略方式不允許先聲明后賦值,只能聲明同時直接賦值。

例如:int [ ]arr3; arr3 = {} //編譯出錯

動態(tài)初始化:指數組聲明和數組引用賦值分開。根據數組定義方式的不同,又分為兩種。

第一種:直接引用相同數組進行賦值。

例如:int[ ] arr=arr;直接將數組arr賦值給了arr;注:一定得相同類型的數組

第二種:數據類型 [ ]數組名稱 = new 數據類型 [數組長度];

例如:int [ ]arr1 = int[10]; int arr1[0] = 0;

2.2數組的使用

每一個存儲到數組的元素,都會自動的擁有一個編號,從0開始,這個自動編號稱為數組索引 (index),可以通過數組的索引訪問到數組中的元素。 數組的長度屬性: 每個數組都具有長度,而且是固定的,Java中賦予了數組的一個屬性,可以獲取到數組的長度,語句為:數組名。length,屬性length的執(zhí)行結果是數組的長度,int類型結果。由次可以推斷出,數組的最大索引值為:數組名。length-1。

public static void main(String[] args) {
	 int[] arr = new int[]{1,2,3,4,5}; 
	 //打印數組的長度,輸出結果是5
	  System.out.println(arr.length);
    //打印對應數組的值,輸出結果為1
      System.out.println(arr[0]);
}

2.3數組內存原理

在Java中,內存是非常非常重要的,作用:運行程序。我們編寫的程序都是存放在硬盤當中的,而在硬盤里的程序是不會運行的,必須得在內存當中才能運行,運行完畢后會清空內存。 Java虛擬機要運行程序,必須要對內存進行空間的分配和管理。

2.3.1Java虛擬機內存劃分

Java為了提高效率,把內存進行了劃分,從而使每一片區(qū)域都有特點的處理數據方式和內存管理方式。

jvm的內存劃分:

區(qū)域名稱作用
寄存器給CPU使用,和我們開發(fā)無關
本地方法棧JVM在使用操作系統功能的時候使用,和我們開發(fā)無關
方法區(qū)存儲可以運行的class文件
堆內存存儲對象或者數組,new來創(chuàng)建的,都存儲在堆內存
方法棧方法運行時使用的內存,比如main方法運行,進入方法棧中執(zhí)行

此處我們不詳細講解,只講解與數組有關的堆區(qū)間。

1.棧(Stack): 存放的都是方法中的局部變量。方法的運行一定要在棧當中運行局部變量:方法的參數,或者是方法幾內部的變量 作用域: 一旦超出作用域,立刻從棧內存當中消失

2.堆(Heap) : 凡是new出來的東西都在堆中

2.3.2數組內存示例圖

在圖中我們可以看見,棧區(qū)可以有堆區(qū),其實不是這樣理解的,而是可以通過棧區(qū)而去訪問堆區(qū),

個人理解:數組變量名就是一個遙控器,可以控制堆區(qū)。

三.二維數組的認識

二維數組本質上也就是一維數組, 只不過每個元素又是一個一維數組

二維數組的四種不同形式的定義方式:

定義二維數組:int[][] array1 = new int[10][10];

定義二維數組(簡潔版):int array2[][] = new int[10][10];

定義二維數組并且初始化:int array3[][] = { { 1, 1, 1 }, { 2, 2, 2 } };

定義二維數組并且初始化(簡潔版)int array4[][] = new int[][] { { 1, 1, 1 }, { 2, 2, 2 } };

其實仔細一看。我們可以看見以上的定義方式和一維數組十分相似。

二維數組存儲的相當于一維數組的集合。

圖片例如:

二維數組array3 擁有array3[0]和array3[1]兩個一維數組,其實道理和一維數組一樣,只不過擁有的不再是元素,而是數組。想象一下套娃,便懂了。

注:只定義二維數組時,可以不寫第二個下標,但一定需要定義第一個下標,實際就是定義有幾個一維數組。

四.數組作為方法參數和返回值

將數組傳遞到方法當中。有沒有想過,這是值傳遞,還是地址傳遞呢?

public static void main(String[] args) {
    int[] arr = {1, 2, 3};
    func(arr);
    System.out.println("arr[0] = " + arr[0]);
} 
public static void func(int[] a) {
    a[0] = 10;
    System.out.println("a[0] = " + a[0]);
} 
// 執(zhí)行結果
a[0] = 10
arr[0] = 10

我們可以發(fā)現數組傳遞過去之后,程序結束,數組值發(fā)生了改變,那么這是地址傳遞嗎?事實上,并不是的。但是我們得注意,此時此刻我們這并不是傳地址,而是傳引用。

原理圖:

解釋:相當于從一個控制器(arr)變成了兩個控制器(arr,a),這兩個指向同一個堆,都可以對其修改。

但是是否存在傳引用之后,卻無法改變實參的值?存在的,new可以創(chuàng)造出一個新的堆空間,從而與之前的數組分道揚鑣。

例如:

重點: arr數組值為1,2,3;傳引用之后,a的數組值也為1,2,3;也就是說,arr==a;但是重新new出一個堆空間之后,a控制的堆不再是arr控制的堆,因此也無法改變arr數組了

五.Java常用API

API,你先當作一個方法庫一樣理解,有了API,我們可以更加快速的操作數組。

5.1輸出數組

Arrays.toString()

 int[] array = { 1, 2, 3 };
 System.out.println(Arrays.toString(array));
//輸出【1,2,3】

5.2數組轉集合

Arrays.asList()

String[] array2 = {"a", "b", "c", "d"};
	System.out.println(array2);  
	List list = new ArrayList(Arrays.asList(array2));
	System.out.println(list);   // [a, b, c, d]
	list.add("GG");
	System.out.println(list);  // [a, b, c, d, GG]

5.3數組中是否包含某個值 Arrays.asList().contains()

String[] array = { "a", "b", "c", "d", "e" };
boolean isEle = Arrays.asList(array).contains("a");
System.out.println(isEle);

5.4數組排序Arrays.sort()

 int[] array = { 3, 1, 2 };
 System.out.println(Arrays.sort(array));
//輸出:1,2,3

5.5數組二分查找Arrays.binarySearch()

int[] array = { 1,2,4,5,3,7,8 };
System.out.println(Arrays.binarySearch(array,5));
//輸出4

以上并不是全部,只是列舉了一些常用的類方法。

總結

數組的重點在于了解內存存儲的數據,還有如何使用數組的數據,如何快捷使用對應的類方法。

到此這篇關于詳解Java數組的一維和二維講解和內存顯示圖的文章就介紹到這了,更多相關Java一維二維數組和內存顯示圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Eclipse設置svn忽略文件或文件夾(svn:ignore)的操作

    Eclipse設置svn忽略文件或文件夾(svn:ignore)的操作

    這篇文章主要介紹了Eclipse設置svn忽略文件或文件夾(svn:ignore)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Hibernate中的多表查詢及抓取策略

    Hibernate中的多表查詢及抓取策略

    本文主要介紹了Hibernate中的多表查詢及抓取策略,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • java通過url下載文件并輸出的方法

    java通過url下載文件并輸出的方法

    下面小編就為大家分享一篇java通過url下載文件并輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Spring?Integration概述與怎么使用詳解

    Spring?Integration概述與怎么使用詳解

    公司項目需要用到spring integration,而網上關于spring integration的有價值的參考資料比較少,下面這篇文章主要給大家介紹了關于Spring?Integration概述與怎么使用的相關資料,需要的朋友可以參考下
    2023-02-02
  • java:提示程序包org.junit不存在時的解決方案

    java:提示程序包org.junit不存在時的解決方案

    這篇文章主要介紹了java:提示程序包org.junit不存在時的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java利用TCP實現服務端向客戶端消息群發(fā)的示例代碼

    Java利用TCP實現服務端向客戶端消息群發(fā)的示例代碼

    這篇文章主要為大家詳細介紹了Java如何利用TCP協議實現服務端向客戶端消息群發(fā)功能,文中的示例代碼講解詳細,需要的可以參考下,希望對你有所幫助
    2022-08-08
  • 如何在Java中獲取當前年份(實例代碼)

    如何在Java中獲取當前年份(實例代碼)

    在Java語言中獲取當前年份有幾種方法:使用java.util包下的Calendar類,使用java.time包下的LocalDate類或者使用java.text包下的SimpleDateFormat類,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-11-11
  • @RequestParam?和@RequestBody注解的區(qū)別解析

    @RequestParam?和@RequestBody注解的區(qū)別解析

    在 Spring MVC 中,我們可以使用 @RequestParam 和 @RequestBody 來獲取請求參數,但它們在用法和作用上有一些區(qū)別,這篇文章主要介紹了@RequestParam?和@RequestBody注解的區(qū)別,需要的朋友可以參考下
    2023-06-06
  • 使用Spring Cloud Feign作為HTTP客戶端調用遠程HTTP服務的方法(推薦)

    使用Spring Cloud Feign作為HTTP客戶端調用遠程HTTP服務的方法(推薦)

    在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗,開發(fā)者完全感知不到這是遠程方法,更感知不到這是個HTTP請求,具體內容詳情大家參考下本文
    2018-01-01
  • Mybatis之Mapper動態(tài)代理實例解析

    Mybatis之Mapper動態(tài)代理實例解析

    這篇文章主要介紹了Mybatis之Mapper動態(tài)代理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論