1. 程式人生 > >Java中陣列表示1(一維陣列的定義、初始化和記憶體中陣列的表示)

Java中陣列表示1(一維陣列的定義、初始化和記憶體中陣列的表示)

各個語言中都有陣列,但Java中是有區別的,Java中只有一維陣列,沒有多維陣列,多維陣列使用陣列的陣列來表示的。所以下面介紹的陣列主要以一維陣列來表示

1.陣列的定義

陣列型別也是一種型別,本身是一種引用型別,例如int是一個基本資料型別,但是int[]就是一種引用資料型別。其定義方式有兩種,分別為:

  • 型別 陣列名[];   如:String  arrayName1[];    int arrayName2[];
  • 型別[] 陣列名;   如:String[]  arrayName1;    int[] arrayName2;

推薦使用第二種宣告方式,因為第二種宣告方式具有更好的可讀性,對於int[] arrayName方式,很容易可以理解成:定義一個變數arrayName,型別為int[]。

2.陣列的初始化

Java在陣列宣告時並不為陣列分配儲存空間(不同於其它高階語言),僅有陣列宣告,而未分配儲存空間。Java語言中陣列必須先初始化,然後才可以使用。初始化包括陣列的記憶體分配和對陣列元素賦初始值。

Java陣列的初始化分為兩種方式:

  • 靜態初始化:陣列定義與陣列元素的空間分配和賦值操作同時進行。
  • 動態初始化:陣列定義與陣列元素的空間分配和賦值操作分開進行。

2.1 靜態初始化

陣列初始化是指在宣告陣列的同時指定陣列元素的初始值。

語法格式如下:arrayName = new type[] {element1, element2, …};

例如:

int[] intArray = new int[]{1, 2, 3, 4, 5};
double[] decArray = new double[]{1.1, 2.2, 3.3};
String[] strArray = new String[]{"Java", "Android", "FORTRAN"};

靜態初始化還有一種簡化的資料形式(比上面的方式用的更廣泛):

int[] intArray = {1, 2, 3, 4, 5};
double[] decArray = {1.1, 2.2, 3.3};
String[] strArray = {"Java","Android","FORTRAN"};
注意:如下幾種陣列初始化方式是不允許的:
int[] intArray = new int[5]{1, 2, 3, 4, 5}; //錯誤
int[5] intArray = new int[]{1, 2, 3, 4, 5}; //錯誤
int[5] intArray = {1, 2, 3, 4, 5}; //錯誤
陣列的長度由程式自動計算,不需要我們手動寫。

2.2 動態初始化

為已宣告陣列(型別  陣列名[ ])動態分配空間的一般形式如下:

arrayName = new type[arrayLength];

注:陣列大小也稱為陣列的長度,可以為整型常量或變數。

例如:

int[] value1;
value1=new int[10];
int[] value2=new int[10]; //宣告陣列的同時,用new運算子為陣列分配空間
// int[10] value3 = new int[10];  //錯誤

2.3 一維陣列的訪問

一維陣列的訪問語法如下:

語法:陣列[下標]   下標是從0開始的。

int[ ] a = new int[4];
a[0] = 20; //訪問陣列元素並賦值
a[1] = a[0] + 10; 
其示意圖如下:


注意:訪問其他元素會產生陣列越界錯誤,會出現異常:ArrayIndexOutOfBoundsException,如訪問a[4]

3.陣列的記憶體表示

為陣列分配空間有兩種方法:陣列初始化使用new運算子;為陣列分配空間後,陣列變數指向陣列儲存空間的引用地址。其記憶體分配的過程如下:

首先,在int i這句話執行完後,在棧(Stack)空間中新建了一個int型別的空間,名稱為i,如下:

其次,執行完int[] a這句話之後,只是在佔空間中定義了一個int[] 型別的陣列,名稱為a,如下:

在執行完a=new int[4]後,這樣才算在堆(Heap)記憶體中新建了一個長度為4個int型別陣列,如下:

在執行完for迴圈後,陣列的值也進行了重新賦值,如下:


全文完。轉載請註明出處。

相關推薦

Java陣列表示1陣列定義初始記憶體陣列表示

各個語言中都有陣列,但Java中是有區別的,Java中只有一維陣列,沒有多維陣列,多維陣列使用陣列的陣列來表示的。所以下面介紹的陣列主要以一維陣列來表示。 1.陣列的定義 陣列型別也是一種型別,本身是一種引用型別,例如int是一個基本資料型別,但是int[]就是一種引用資

C++小知識陣列定義初始賦值

在C/C++中,可以在陣列定義的時候對其進行初始化:int a1[3] = {1, 2, 3};  int a2[3] = {0};                    //將陣列a2各個元素賦值為0。int a3[] = {1, 2, 3};  char s1[3] = 

java成員變數區域性變數的初始記憶體的執行機制

成員變數:   當系統載入類或建立類的例項時,系統會自動為成員變數分配記憶體空間,並在分配記憶體空間後,自動為成員變數指定初始值。 eyeNum是類屬性。name是例項屬性 所有person例項訪問eyeNum都將訪問person類的eyeNum屬性。訪問的是同一塊記憶

2.1詳解變數的定義初始與賦值

在前的課程中我們談到,變數其實就是一塊記憶體空間的名稱。簡要地說,計算機擁有可供程式使用的隨機存取儲存器(RAM),當一個變數被定義時,一部分記憶體就會被預留給這個變數。 記憶體的最小單位是二進位制數字(binary digit,bit,位元),0或者1。你可以把bi

淺析C++結構體的定義初始引用

#include<iostream>using namespace std; struct Date{        //宣告一個結構體型別Date   int month;      //日期中的月份   int day;        //日期中的天   int year;       //日

指標與陣列的關係

一、指標和一維陣列間的關係 前提條件: int a[10];//元素個數隨意自己定 int *p = a;//定義指標時直接初始化,也可以分為兩步:int *p; p=a; 第i個元素的地址: &am

JAVA基礎19---陣列定義初始及遍歷

陣列 陣列的定義:將同種型別的資料,有組織的存放與一定的記憶體空間中。 陣列的定義格式:           常用的格式:                                ①資料型別[]  陣列名稱 = new 資料型別[定義陣列的大小];      

c語言陣列定義初始

一維陣列 1、定義:是一組具有相同資料型別的有序元素集合。 2、初始化: (1)、初始化方式一: //陣列的定義: int a[length]; //這是陣列的定義 //可以使用for迴圈進行遍歷初始化 for (int i =

Python輸入數組數組數組

python aac off class 二維數組 之間 pan wrapper == 一維數組: arr = input("") //輸入一個一維數組,每個數之間使空格隔開 num = [int(n) for n in arr.split()] //將輸入每

leetcode 198 打家劫舍 動態規劃基礎

題目:你是一個職業盜賊,鎖定了一條大街準備今晚作案,街上每棟房子裡都有固定量的財務。但是相鄰的房子之間有報警器,一旦兩個相鄰的房子在同一晚被盜,就會觸發報警器。現已知一系列非負整數表示每個房子裡的財務數目,請計算在不觸發報警器的情況下,你今晚可以盜取的最大值。思路:因為我可以

變量的聲明定義初始

局部變量 聲明和定義 包含 int 外部變量 存儲 變量聲明 bsp 運行 先分享一下關於變量聲明和定義的區別: 變量的聲明有兩種情況: (1) 一種是需要建立存儲空間的(定義、聲明)。例如:int a在聲明的時候就已經建立了存儲空間。 (2) 另一種是不需要

tensorflow入門 變數的定義初始值的檢視

1、常量 constant是TensorFlow的常量節點,通過constant方法建立,其是計算圖(Computational Graph)中的起始節點,是傳入資料; import tensorflow as tf sess = tf.Interact

陣列定義初始及特點詳解

陣列(Array),就是把有限個數據型別一樣的元素按順序放在一起,用一個變數命名,然後通過編號可以按順序訪問指定位置的元素的一個有序集合。 其實簡單來說,就是為了方便而把這些元素放在一起。我們通過編號去獲取每個元素,這個編號叫作下標或者索引(Index),一般的語言是從 0 開始的。 我們常說的陣列一般指

C++字元陣列定義初始引用

用來存放字元資料的陣列是字元陣列,字元陣列中的一個元素存放一個字元。字元陣列具有陣列的共同屬性。由於字串應用廣泛,C和C++專門為它提供了許多方便的用法和函式。 一、字元陣列的定義和初始化 定義字元陣列的方法與前面介紹的類似。例如char c[10];c[0]=′I′;c[1]=′ ′;c[2]=′a′;c

GO語言————8.1 MAP宣告初始make

8.0 Mapmap 是一種特殊的資料結構:一種元素對(pair)的無序集合,pair 的一個元素是 key,對應的另一個元素是 value,所以這個結構也稱為關聯陣列或字典。這是一種快速尋找值的理想結構:給定 key,對應的 value 可以迅速定位。map 這種資料結構在

Java變數的宣告初始作用域

一.Java變數的宣告 在 Java 程式設計中,每個宣告的變數都必須分配一個型別。宣告一個變數時,應該先宣告變數的型別,隨後再宣告變數的名字。下面演示了變數的宣告方式。 double salary; int age; Boole

細談 物件的初始過程------記憶體的實現過程?

今天對於記憶體的理解 又加深了一步: 對下面程式碼的理解: class Person { private String name="xiaohong"; private int age=23; private static String country="CN";

mysql8.0 Server 在Windows平臺的安裝初始遠程訪問設置

ner oot ali 文件 想要 net 成了 基於 progress mysql8.0 server安裝1.下載mysql 8.0可以到mysql官網下載 https://dev.mysql.com/downloads/mysql 或者如下地址 mysql-8.0.13

0-1揹包與完全揹包 SDNUOJ1033採藥陣列1043採藥2陣列

1033(一維陣列)(揹包容量 j 逆序列舉)0-1揹包 #include<iostream> #include<cstring> #include<cmath> using namespace std; #define N 1005 int v[N]

java之中的陣列聯絡轉置

public class TestString{public static void main(String args[]){int data[] = new int [] {1,2,3,4,5,6} ;print(data) ;reverse(data);print(data);}public static