2012-10-07 37 views
3

我編碼如下,但o/p不是預期的?有人指導我?使用顯式類型轉換將十六進制整數轉換爲字符?

問題:編寫一個示例程序來聲明一個十六進制整數並使用顯式類型將其轉換爲字符轉換?

class hexa 
{ 
public static void main(String ar[]) 
{ 
    int hex=0xA; 
    System.out.println(((char)hex)); 
} 
} 

請告訴我: 爲什麼在輸出

/*code 1*/ 
int hex = (char)0xA; 
System.out.println(hex); 
/*code 2*/ 
int hex = 0xA; 
System.out.println((char)hex); 
+2

什麼是輸出和你的期望是什麼? – user1406062

+0

爲什麼輸出有差異? /* code 1 */ int hex =(char)0xA; System.out.println(hex); /* code 2 */ int hex = 0xA; System.out.println((char)hex); –

回答

8
int hex = 0xA; 
System.out.println((char)hex); 

的十六進制值是0xA(或十進制10)的差異是 「\ n」(新換行字符)在ASCII。
因此輸出。

EDIT(感謝halex在評論提供了修正:。

int hex = (char) 0xA; 
System.out.println(hex); //here value of hex is '10', type of hex is 'int', the overloaded println(int x) is invoked. 

int hex = 0xA; 
System.out.println((char) hex); //this is equivalent to System.out.println('\n'); since the int is cast to a char, which produces '\n', the overloaded println(char x) is invoked. 
+0

爲什麼輸出有差異 /* code 1 */ int hex =(char)0xA; System.out.println(hex); /* code 2 */ int hex = 0xA; System.out.println((char)hex); –

+0

關於你的編輯:在你寫的代碼的註釋中,'toString'在'int'和'char'上被調用,但這是不正確的。沒有自動裝箱,但爲['int']調用了適當的重載版本'println'(http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html#println( int))和['char'](http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html#println(char))類型。 – halex

1

我假設你要打印的信A 代替print使用printf

int hex=0xA; 
System.out.printf("%X%n", hex); 
+0

如果是這樣,那麼%n是什麼 –

+0

換行符。沒有那個printf就更像'print'而不是'println'。 –

相關問題