Char、int 和 long 都是整數,但還有其他大的位。
我知道,如果你從一個整數創建一個 long 例如:
int a=39; long b=a;
long中的那個不是64位的數,也是32位的整數。
當我們做:
int a=39; long b=aL;
我讀過,如果你在 long 中添加一個 L,那么在 long 上也是一個 64 位的數字。但是我讀到 Java 在內部將之前的整數視為整數,然后通過 L 數字變為 64 位。但在此之前,數字也被短時間存盤在32位長中。
所以我讀到,通常總是首先形成一個 32 位的整數 long,然后將其制成 64 位。因此,即使有人進行 long test =93L; ,在 long 中先創建一個 32 位的整數,然后用 L 擴展,從而變成 64 位。所以作為中間步驟,你總是有一個整數。那是對的嗎?
如果是的話,我怎樣才能將一個字符轉換 char test1 ='A'為一個 long 而不將它們之前轉換為一個 32 位整數?因為如果我是對的,如果我使long test2=test1;long 中沒有 64 位的 long/integer,那么只有一個 32 位。真的嗎?
還是現在 long 是一個 64 位的整數?如果是這樣,之前是 32 位嗎?
如果我說的是真的,我怎樣才能讓一個 char 直接變成 64 位而不先是一個 int 呢?
uj5u.com熱心網友回復:
讓我們用一個測驗程式試試
public class Test {
public static void main(String args[]) {
long a = 'a';
}
}
讓我們編譯它
javac Test.java
讓我們拆開它
javap -c Test.class
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: ldc2_w #2 // long 97l
3: lstore_1
4: return
}
看到這個:
0: ldc2_w #2 // long 97l
它'a'直接將 97( 的數值)加載為long. 沒有中間步驟使您的值是 32 位寬。
如果您不直接執行此操作,當然會得到不同的結果,即該數字首先存盤為 32 位 int,然后加載到 long 中(但您通過宣告a為 a明確要求這樣做char,所以這并不奇怪)
public class Test {
public static void main(String args[]) {
char a = 'a';
long b = a;
}
}
讓我們反編譯這個
javap -c Test.class
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: bipush 97
2: istore_1
3: iload_1
4: i2l
5: lstore_2
6: return
}
uj5u.com熱心網友回復:
長是 64 位。
將 int 值賦給 long 變數時,該值將轉換為 long。
long a = 5; // same as long a = (long) 5;
long b = 5L;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383713.html
上一篇:使用后綴增量運算子將值添加到陣列
