Java採用UTF-16編碼做爲內碼,也就是說在JVM內部,文本是用16位碼元序列表示的,經常使用的文本就是字符(char)和字符串(String)字面常量的內容。注:UTF-16是Unicode字符集的一種編碼方案。java
Java字符和字符串存在於如下幾個地方:c++
Java編譯器須要正確的讀取源碼,消除編碼差別,而後編譯成UTF-8編碼的Class文件。好比javac,默認狀況下它會取操做系統的編碼,能夠使用參數-encoding指定源碼文件的字符編碼。JVM加載Class文件,把其中的字符或字符串轉成UTF-16編碼序列。編程
Java中涉及編碼的類主要有String
和IO包中的字節字符轉換流。String.getBytes()
使用JVM啓動時得到的字符集來編碼字符串,也能夠使用getBytes(charset)
指定字符集;字節就是單純的01,但轉成字符時就要有字符集的概念了,IO包中的InputStreamReader
和OutputStreamWriter
,是字節流和字符流的橋樑,默認使用JVM默認字符集對字符解碼和編碼,能夠經過構造方法指定字符集。xcode
String str = "創";
str.getBytes("UTF-8"); // 3字節,0xE5889B
str.getBytes("UTF-16"); // 2字節,0x521B
InputStreamReader(InputStream, charset);
OutputStreamWriter(OutputStream, charset);
Java編程語言主要有如下幾種字符:markdown
String 名字="cxcoder";
() {} [] ; , . ... @
\b \t \n \f \r \" \' \\
不使用Unicode轉義字符也能表示一些特殊字符String hello = "Hello", lo = "lo";
System out print(hello == "Hello"); // true 一個字符串字面常量老是引用String的同一個實例
System out print(hello == ("Hel" +"lo")): // true 常量表達式,編譯時得出結果,當作字面常量對待 System out print(hello == ("Hel"+1o)); // false 運行時鏈接運算產生新String對象
System out println(hell0 == ("Hel"+lo).intern()); // true 查找常量池是否有此字符串,有返回,無放進去,以前已定義intern返回同一個String實例
null看起來是關鍵字,但從技術上講,它僅僅是空字面常量,表示空引用。像true/false
也只是布爾字面常量。app