2014-02-10 81 views
3

爲什麼下面打印197,但不是'BC'?Java如何連接2個字符串?

System.out.println('b' + 'c'); 

有人可以解釋如何在Java上做適當的連接嗎?

P.S.我學習了一些Python,現在正在轉變爲學習Java。

+5

那麼對於初學者這些都不是字符串。字符串文字使用雙引號。 – PakkuDon

+1

'197'是'b'和'c'的Unicode值的總和,Python不同於Python中的Java''b''和''c''是字符串在Java中它們是char文字,字符串文字必須是雙引號'''''' –

回答

6

'b''c'String S,它們是char秒。您應該使用雙引號"..."代替:

System.out.println("b" + "c"); 

你得到一個int,因爲你要添加這些字符的unicode values

System.out.println((int) 'b'); // 98 
System.out.println((int) 'c'); // 99 
System.out.println('b' + 'c'); // 98 + 99 = 197 
+3

Java語言規範將'char's定義爲編碼Unicode代碼點的UTF-16代碼單元,而不是ASCII值。 –

1

'b'不是StringJava它是char。然後'b'+'c'打印197

但是,如果您使用"b"+"c"這將打印bc因爲""用於代表String

System.out.println("b" + "c"); // prints bc 
1

使用+串聯字符將字符值更改成ASCII並因此給出數字輸出。如果你想bc作爲輸出,你需要有bc作爲字符串。目前,您的bc是Java中的char。

在Java中,字符串應該""和字符包圍被''

1

是單引號是字符包圍,而雙引號表示字符串,因此:

System.out.println("b" + "c"); 

一些備選方案可以是:

"" + char1 + char2 + char3; 

或者:

new StringBuilder().append('b').append('c').toString(); 
+0

'.append(「」)'是多餘的。 – Pshemo

1

在Java中,字符串字面量來表示雙引號 - ""

你所做的是增加了兩個char值加在一起。你想要的是:

System.out.println("b" + "c"); // bc 

什麼你的代碼的情況是,它增加了charsASCII值拿出197

'b'的ASCII值是98而且'c'的ASCII值是99

所以它是這樣的:

System.out.println('b' + 'c'); // 98 + 99 = 197 

正如我參考了chars的ASCII值記:

CHAR數據類型是一個16位Unicode字符。

來自Docs。然而,對於一個字節(0-255),據我所知,chars可以可以用它們的ASCII值表示,因爲ASCII值直接對應於Unicode代碼點值 - see here

我在上面的回答中引用ASCII值的原因是因爲256個ASCII值覆蓋了所有字母(大寫和小寫)和標點 - 所以它涵蓋了所有主要內容。

從技術上講,我說的是正確的 - 它確實添加了ASCII值(因爲它們與Unicode值相同)。但是,從技術上講,它添加了Unicode代碼點十進制值。

+1

[Unicode,不是ASCII](http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html) – Christian

+0

@Christian我知道chars是用unicode字符表示的。但是,ASCII值對應於很好的解釋。 –

+3

@mikeyaworski Unicode索引對應更好,因爲它們實際上在這裏使用。 – Pshemo

1

'b'和'c'不是字符串,它們是字符。 197是B和C

的Unicode值的總和Concatinating字符串可以使用以下2種方式:

  • System.out.println("b"+"c");
  • System.out.println("b".concat("c"));