1. java中的數組變數在內存中怎樣分配
首先 數組比較值不是你這樣比的 應該先判斷兩個數組的length是不是相等 然後再依次比較才行 你這樣比較的是abc三個引用的地址值 必然是不相等的 所以是false
然後 對於數組 new出來以後 是放在堆中 也就是你的aaa bbb ccc 是在堆中
然後棧中有一個a 保存 堆中aaa bbb ccc這個數組的地址 也就是 a 指向了 那個數組
當你再申請c 和d的時候 首先會到堆中去尋找是不是已經有了aaa bbb ccc 如果有了 就指向 沒有就new 所以 後面的 c和d 其實指向的也是同一個地方。
2. 在Java中定義數組時必須分配內存,這句話是錯的還是對的呢
Java中的數組你可以看到一個特殊的對象,聲明時是放在棧中的,分配的空間存儲在堆中
如:
1. int[] arr = null;
此時只是在棧中聲明了一個 arr 數組,但並未對其分配空間,所以它沒有指向
2. int[] arr = new int[6];
此時在棧中聲明了一個arr數組,並且在堆中開辟了一塊空間,此時 arr 已經分配內存了
看具體的情況吧,定義數組應該是聲明吧,在需要的時候再開辟空間也可以
3. java 數組內存分配
Stringdogs[]=newString[]{
"Tom","Sam","Mimi"};
dogs是在內存棧區聲明的,newString是在堆區去聲明的dogs指newString的內存地址
Stringdogs[]={"Tom","Sam","Mimi"};
直接在棧區實例化數組對象
如果寫成Stringdogs[]=null;
dogs={「haha」}
棧區只有聲明並為實例化所以在並無法直接賦值,只能直接附屬組
4. JAVA里String數組在內存分配中分配的空間每個占幾個位元組
1.
names是一個引用,也是一個指針,是保存在棧中的。「zhangsan」「lisi」"wangwu"是堆中中一塊連續的物理內存,names這個引用是指向數組的首個字元串''zhangsan''
,names+1則指向了"lisi"
在堆中是開辟了一塊連續的內存空間
2.
string[]
names
=
new
string[3];也是在堆內存里開辟了一塊連續的空間,只不過裡面放的是三個null而已。
5. 寫出java代碼,如何聲明數組,分配內存給數組,並給數組指定初始值
java 里沒有c中的malloc,只有new關鍵字會分配內存。
primitive types(int, float, double, char, boolean, byte)
分步:
int[] array // 此時jvm未分配內存
array = new int[2]; //此時分配內存,2個int
一步:
int[] array = {1,2}
object types (Object)
分步:
Object[] objs; // 此時jvm未分配內存
objs = new Object[2]; // 此時jvm分配了數組本身用的內存,但數組內元素內存未分配。
objs[0] = new Object(); // 此時分配內存
objs[1] = new Object(); // 此時分配內存
一步:
Object[] objs = {new Object(), new Object()};
6. java中創建數組時怎麼分配內存
疑問1啊 分配指針只有一個 不是arr[0] 也不是arr[1] 就是arr
疑問2啊 java中數組指針指向頭部元素
疑問3啊 原來你知道指向第一個.. 既然指向第一個了 後面方括弧內的數字 就告訴你要跳過幾個數據 比如arr[0] 就一個也不跳 直接從頭讀取一個元素 arr[1]就會跳過第一個再讀取 至於跳多少 你定義的時候已經規定了類型
疑問4啊 原來你都知道... 我想你就是這么一個問題吧 其實不是基本類型的時候 變數變為引用變數 C++叫指針數組 也是和你的疑問3一樣 通過索引到元素後 讀取內部地址後再訪問實例 也就是堆了
關於括弧內的 樓主所謂的內存變 其實不過是"引用變數的內存"變 分配的空間是沒變的 說白就是改變一個引用的地址 也就是他的值 改變一個變數的值 有啥好奇怪的??
問題5 int[]arr 就一個指針 arr
我提個問題好么 下次提這么多問題 多弄點分行么?
7. java二位數組內存分配問題
java中沒有像其他語言一樣,有多維數組的類型,是因為java的多維數組都是看作數組的數組,比如說二維數組看作是一維數組的數組,即在一維數組中放數組。其他的同理。
一般只要在定義時候規定了第一個數組的維數就可以了,比如int [][] a = new int [2][];後面的不指定維數,java虛擬機就能運行成功。
int [][] a= new int [2][];可以寫成 int[] a[] = new int [2][];也就是在a[]數組中放int[]數組。
此時在內存中就會先分配兩塊內存空間,而不會去管每一塊裡面如何再去分配,那是每一塊內存自己的事。所以不是連續分配成連續的4個int空間,而是先創建2個int[]空間。然後每一個int[]空間再分別分配。
8. java中string數組是怎麼存儲的
1. java中定義一個字元串數組方式如下,string類型和其他基本類型相似,創建數組有兩種方式:
String[] str={"AAA","BBB","CCC"};
String str[]={"AAA","BBB","CCC"};
2.推薦用ArrayList<String> strArray = new ArrayList<String> (); 比較靈活。
3.也可以寫為如下格式:class[] array; array = new class[number];其中前半句為聲明,後半句為初始化,初始化必須要讓編譯器知道大小,聲明的時候java是不分配內存的,只有創建的時候也就是new的時候才會分配內存。
1.數組是相同數據類型的元素的集合。
2.數組中的各元素的存儲是有先後順序的,它們在內存中按照這個先後順序連續存放在一起。
3.數組元素用整個數組的名字和它自己在數組中的順序位置來表示。例如,a[0]表示名字為a的數組中的第一個元素,a[1]代表數組a的第二個元素,以此類推。
4.對於VB的數組,表示數組元素時應注意:下標要緊跟在數組名後,而且用圓括弧括起來(不能用其他括弧)。下標可以是常量,變數,或表達式,但其值必須是整數。下標必須為一段連續的整數,其最小值成為下界,其最大值成為上界。不加說明時下界值默認為1。