Java是一種跨平臺的語言,這注定了JVM能適應各類平臺的編碼環境。當今只有UNICODE能包含各類文字,而UTF-8編碼能解決大小端問題,**因此Java的class是採用UTF-8格式存儲字符串的。**雖然JVM內部採用UTF-16編碼表示字符串。java
咱們知道,java文件能夠是各類編碼,如GBK,UTF-8等等,可是經過javac編譯後,產生的class文件都是UTF-8編碼的。編碼
能夠發現,該Java文件是採用ASNI編碼(GBK)的。咱們經過javac Main.java編譯,獲取到class文件字符串
經過使用UTF-8編碼查看,就能夠發現「中文」了。再使用javap -verbose Main.class 查看:console
能夠發現字符編碼就是UTF-8編碼。字符編碼
值得注意的是,javac 有一個參數** -encoing ,這個參數指定了java文件是什麼編碼格式的,若是不指定則會採用系統默認編碼格式,如GBK**。編譯
在控制檯中,咱們能夠看到中文的輸出,class
可是,咱們知道JVM中字符串是採用UTF-16編碼的,console編碼是系統默認編碼GBK。能夠推斷,JVM調用println的時候,會把UTF-16的JVM編碼字符串轉換爲系統默認編碼GBK,使得輸出中文結果能正確。im