查漏补缺
-
关于classpath
在没有IDE的情况下,可以使用javac(java compiler)命令来编译java文件为class字节码文件。
classpath变量是寻找类路径的变量,在这个路径下的java文件才可以被javac直接编译。 -
数据类型
基础类型有8种:byte,short,char,int,long,float,double,boolean
各自的内存空间大小:
byte:1个字节(1个字节占8位或者说是8bit)
short:2个字节
char: 2个字节
JAVA内部使用的是utf-16
Utf-16就是说规定了一个字符用16位(2个字节)的空间来存储
utf-8是一个字符用8位(1个字节)的空间来存储
16位就是2的16次方,几乎涵盖了所有国家的文字和符号,所以utf-16比utf-8能表示的字符要多得多
使用char a = '/u0000’来定义一个字符变量a为‘/u0000’ ,实际上存的是16个0;
编码方面
困扰了我很久的编码,终于理清了。
-
什么是unicode?
unicode是一个全球的(编码)规范,规定了什么数字代表什么字符。
而在计算机中都是用二进制来表示,所以unicode实际上就是规定了什么二进制数字对应什么字符
unicode最初定义为16位来表示,所以使用十六进制来表示。
举例: 数字'25105' 在unicode中代表中文'我'
十进制25105换成十六进制就是6211
二进制就是0110 0010 0001 0001
也就是说如果是0110 0010 0001 0001这一串二进制数字,unicode中代表的是'我'这个字符
unicode的一般表示就是类似\uBBBB这种形式的,
上例中的’我‘的unicode码就是:\u6211
为什么不先讲这个呢,因为我是从unicode开始理清的。
ascail码就是很早之前美国编制的一套标准,为什么强调了美国呢?
因为美国是使用英文作为语言的,总共26个字母
ascail码也是一套编码规范其中包含了26个小写字母,26个大写字母,数字0~9,一些计算机符号以及特殊的表情符号
总共128个字符,所以只需要7位二进制数字就可以表示所有ascail码了。
举例:数字'65' 在ascail码中代表字符'A'
十进制65换成二进制就是100 0001
因为ascail码最大是7位,不需要十六进制表示。
unicode是在ascail的基础上扩展出来的。
utf-8
先不说utf-8,继续说一下unicode
前面我们提到25105代表unicode的’我‘,那定好了这个规则,如何实现将’我‘这个字符存到计算机中呢?
引用百度百科的定义:
Unicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占用一到四个字节,utf-16占用二或四个字节,utf-32占用四个字节。
utf-8占用一到四个字节,是根据字符的范围来决定的。
GBK
那么GBK又是什么呢,GBK是中文字符的一个编码方式
GBK的英文字符占1个字节,中文字符2个字节
接下来使用一个小例子来说明一下:
用idea新建一个txt
输入几个英文字母
-
英文字符
idea右下角确保是GBK
查看一下大小
3个字节,那么说明
GBK英文字母编码方式为一个字母占一个字节切换为UTF-8编码方式
参考刚刚的操作可以得出结论
UTF-8英文字母编码方式也是一个字母占一个字节 -
中文字符
参考英文字符的方法
然后我们可以得出下面的结论:
GBK中文字符编码方式是一个中文字符占2个字节
UTF-8中文字符编码方式是一个中文字符占3个字节