如何理解Java程序使用Unicode字符集编写
Java采用UTF-16编码作为内码,也就是说在JVM内部,文本是用16位码元序列表示的,常用的文本就是字符(char)和字符串(String)字面常量的内容。注:UTF-16是Unicode字符集的一种编码方案。
Java字符和字符串存在于以下几个地方:
- Java源码文件,*.java,可以是任意字符编码,如GBK,UTF-8
- Class文件,*.class,采用的是一种改进的UTF-8编码(Modified UTF-8)
- JVM,内存中使用UTF-16编码
Java编译器需要正确的读取源码,消除编码差异,然后编译成UTF-8编码的Class文件。比如javac,默认情况下它会取操作系统的编码,可以使用参数-encoding指定源码文件的字符编码。JVM加载Class文件,把其中的字符或字符串转成UTF-16编码序列。
Java中涉及编码的类主要有String
和IO包中的字节字符转换流。String.getBytes()
使用JVM启动时获得的字符集来编码字符串,也可以使用getBytes(charset)
指定字符集;字节就是单纯的01,但转成字符时就要有字符集的概念了,IO包中的InputStreamReader
和OutputStreamWriter
,是字节流和字符流的桥梁,默认使用JVM默认字符集对字符解码和编码,可以通过构造方法指定字符集。
String str = "创";
str.getBytes("UTF-8"); // 3字节,0xE5889B
str.getBytes("UTF-16"); // 2字节,0x521B
InputStreamReader(InputStream, charset);
OutputStreamWriter(OutputStream, charset);
FAQ
1. Java中的字符主要有哪些?
Java编程语言主要有以下几种字符:
- 空白字符:空格、制表符、换页符和行终止符
- 注释:/text/ or // text
- 符号
- 标识符:就是变量名和类名,其中的字母和数字可以从Unicode字符集中提取,也就是说能用本地语言编写标识符,如
String 名字="cxcoder";
- 关键字:比如class,new
- 字面常量:简单类型、String、空类型在源码中的表示
- 分隔符:也叫标点符号,
() {} [] ; , . ... @
- 操作符:逻辑和算术运算符
- 标识符:就是变量名和类名,其中的字母和数字可以从Unicode字符集中提取,也就是说能用本地语言编写标识符,如
- 转义字符
- Unicode转义字符:通过\u+4个十六进制数使用任何Unicode字符
- 字面常量转义字符:
\b \t \n \f \r \" \' \\
不使用Unicode转义字符也能表示一些特殊字符
2. 解释一下程序的输出结果
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实例
3. Java中的null如何理解?
null看起来是关键字,但从技术上讲,它仅仅是空字面常量,表示空引用。像true/false
也只是布尔字面常量。
如何理解Java程序使用Unicode字符集编写的更多相关文章
- java程序实现Unicode码和中文互相转换
根据前一篇的补充问题http://blog.csdn.net/fancylovejava/article/details/10142391 有了前一篇文章的了解,大概了解了unicode编码格式了 ...
- 从零自学Java-2.初步理解Java程序使如何工作的
1.学习Java应用程序是如何工作的 2.构成一个应用程序 3.向应用程序传递参数 4.学习Java程序是如何组织的 5.在应用程序中创建一个对象 程序Root:输出225的正平方根 package ...
- Java笔记:编写第一个Java程序
2017.6.17 1.编写第一个Java程序 创建text文本,命名第一个Java程序.txt 在里面编写Java代码 public class Demo1{ public static void ...
- 《深入理解java虚拟机》笔记
二.java内存区域与内存溢出异常 0.在内存管理领域,java与c/c++不同的是,在java虚拟机自动内存管理机制下,java不需要手动去为对象写配对的free内存的代码,不容易出现内存泄漏和内存 ...
- 【Java】《Java程序设计基础教程》第一章学习
一.Java概述 1.介绍了Java语言的由来 2.Java语言的特点:简单.面向对象.分布式.高效解释执行.健壮.安全.结构中立.可移植.高效率.多线程.动态 3.Java语言的实现机制,引入虚拟机 ...
- Unicode字符集,utf8编码,base64编码简单了解
Unicode字符集,utf8编码,base64编码简单了解 Unicode字符集,ASCII,GB2312编码集合等,类似于不同的字典,不同的字符的编码,类似于字典中的字在哪一个页哪一排. 当不同系 ...
- [刘阳Java]_第一个Java程序_第7讲
1. 其实第一个Java程序是很简单,但是当自己编写第一个Java程序时候需要注意如下几个内容: 理解Java程序的运行环境 校验你的Java环境变量是否能够运行你所写的第一个Java程序 理解Jav ...
- Java程序设计基础笔记 • 【第1章 初识Java】
全部章节 >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...
- java基础学习02(简单的java程序)
简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...
随机推荐
- postgresql on centos (sequelize+pg+nodejs):Failed to find PostgresSQL server.Pleast double check your settings
公司的一个项目,使用的nodejs做服务端,数据库是postgresql,在本地时一切ok,放在centos时,postgresql配置ok,可以远程访问,但是nodejs在centos启动时,就会报 ...
- PHP : ActiveRecord实现示例
先简单介绍一下Active Record: Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.Acti ...
- Eclipse 创建 Java 类
打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Cla ...
- Android 最新L版本,都更新什么东西了
Android L版本重大修改 一:New Android Runtime (ART) 新的运行环境,4.4一下的版本ART是可选的运行环境,默认还是Dalvik.但是在Android L版本之后默认 ...
- Rightscale & Amazon
原先一直以为Rightscale是Amazno旗下的一个产品,今天才知道是Amazon partner - -||,实在汗颜. Rightscale也是一个很强大的公司,提供跨云解决方案...(呃,原 ...
- iOS开发常见问题(不断更新)
1.如何从程序退出到桌面 在单击事件中 exit(0);即可. 2.如何强制横屏 在你需要横屏的控制器里加入如下代码 - (BOOL)shouldAutorotate{ return NO; } - ...
- NetBeans执行项目报错
1.错误描写叙述 严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start ...
- SAE+wordpress邮箱问题,WP MAIL STMP插件配置但无效解决的方法
我在SAE上面部署的WordPress是3.9版本号的,而非SAE应用商店里WordPress4sae是3.4的,虽然3.9版本号的确有非常多改进但在部署在SAE上面时须要做非常多改动,并且有些插件也 ...
- [Sdoi2011]火星移民
2283: [Sdoi2011]火星移民 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 119 Solved: 56[Submit][Status] ...
- 【BZOJ3122】[Sdoi2013]随机数生成器 BSGS+exgcd+特判
[BZOJ3122][Sdoi2013]随机数生成器 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b, ...