Java数据类型

image.pngimage.png
注:String不是基本数据类型,在Java中,String属于类

变量的基本概念

变量相当于内存中一个数据存储空间的表示,可以把变量看作一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问变量值。
变量在一个作用域内不能重名

  1. public static void main(String[] args){
  2. int a = 10;
  3. System.out.print(a);
  4. int a = 10;
  5. }

image.pngimage.png

+号的一些使用

从左到右运行

  1. public static void main(String[] args){
  2. System.out.println(100 + "98"); //100转化为字符型 10098
  3. System.out.println("100" + 98); //98转化为字符型 10098
  4. System.out.println(100 + 3 + "hello"); // 103hello
  5. System.out.println("hello" + 100 +3); //hello1003
  6. }

变量默认值

int,short,byte,long 为0。float,double为0.0。char为\u0000,String为null,boolean为false。

JavaAPI

Application Programming Interface——应用程序编程接口,是Java提供的基本编程接口。在线文档地址——在线API中文手册 - 码工具,API用于告诉开发者如何使用这些类,以及这些类里包含的方法。
寻找方法的步骤: 包——类——方法。image.png

整形细节

1.Java各基本数据类型有固定的范围和字段长度,不受具体OS(操作系统)的影响,以保证Java程序的可移植性。
2.Java的整型常量默认为int型声明long型常量须在后面加上’l’或者’L’

  1. int a = 100L; //这样的声明是错误的
  2. long b = 100L; //这样的声明是正确的

image.png
3.Java程序中变量声明为int型,除非不足以表示大数,才使用long。
4. bit:计算机中的最小存储单位。 byte:计算机中基本存储单元。 1byte = 8 bit
举例:byte n1 = 3 和 short n2 = 3 的存储方式
image.png
byte占据一个字节,数值为3,内容为 00000011 。short占据两个字节,数值为3,内容为 00000000 00000011

浮点细节

1. Java的浮点型常量默认为double型,声明float型常量,需要在后面加上’f’或’F’。

  1. float a = 1.1; //错误
  2. float b = 1.1F; //正确
  3. double c = 1.1; //正确
  4. double d = 1.1F; //正确,d仍然是double类型
  5. double e = 3d; //正确,后面加d就代表double类型

2. 浮点型常量有两种表示形式——1.十进制:5.12 512.0f .512(如果是0.···,那么0可以省略,.512就表示0.512) 需要注意的是,必须有小数点,即使是整数也要加上 ‘.0’ 2.科学计数法表示:5.12e2(即5.1210^2) 5.12E-2(即5.1210^(-2))
3. 正常情况都使用double类型,因为比float类型更准确。
4. 相除陷阱——double类型进行相除的时候,是以精度的方式返回这个值。

  1. double num1 = 8.1/3; System.out.print(num1);

image.png
因此,我们对两个数之间的比较,其中有运算结果是小数时要小心,不能用 ‘==’ 来判断是否相等,而是以两个数差值的绝对值,在某个精度范围内判断。

  1. public static void main(String[] args){
  2. double num1 = 2.7;
  3. double num2 = 8.1/3;
  4. if(num1 == num2){//这样的判断方法是错误的
  5. System.out.print("两者相等");
  6. }else{
  7. System.out.print("两者不相等");
  8. }
  9. }

image.png

  1. public static void main(String[] args){
  2. double num1 = 2.7;
  3. double num2 = 8.1/3;
  4. if(Math.abs(num1 - num2) < 0.00001){//在这里设置精度,使用取绝对值方法
  5. System.out.print("符合规定精度,两者相等");
  6. }
  7. else{
  8. System.out.print("不符合规定精度,两者不相等");
  9. }
  10. }

image.png
当然,如果是查询得到或者是直接赋值的小数,可以直接进行比较。

char细节

1.字符常量是使用单引号括起来的单个字符——比如 char c1 = ‘a’ 。
2.Java中允许使用转义字符 ‘\’ 来将其后的字符转变为特殊字符常量。

  1. char c1 = '\n';
  2. System.out.print("第一句话" + c1 + "第二句话");

image.png
3.在Java中,char的本质是一个整数,在输出时对应 Unicode码对应的字符。
Unicode码转换网址——Unicode编码转换 - 站长工具

  1. char c1 = 97;
  2. System.out.println(c1); //输出97号位置对应的字符
  3. char c2 = 'a';
  4. System.out.println((int)c2); //用强制类型转换输出Unicode位置

image.png
5.char类型是可以进行运算的,相当于一个整数,因为它对应的有Unicode编码。

  1. char c1 = 'a' + 10;
  2. System.out.println(c1);
  3. char c2 = 'A' + 'B' - 'C';
  4. System.out.println(c2);
  5. char c3 = 10 + 90;
  6. System.out.println(c3);

在进行计算时,字符常量都会变成Unicode编码的数字。
image.png
6.字符型储存到计算机时,需要将字符对应的码值找出来,以’a’为例,主要过程:
存储: ‘a’ ==> 码值97 ==> 二进制(1100001) ==> 存储。
读取:二进制(1100001) ==> 97 ==> ‘a’ ==> 显示。

boolean细节

在Java中,不可以用0代替false,也不可以用非0整数代替true,换言之,boolean只有true和false两种值。

字符编码表

1.ASCII

美国制定的一套字符编码(使用一个字节),ASCII一共规定了128个字符的编码,只占用了一个字节的后面9位,最前面的一位统一规定为0。缺点是不能表示所有字符。 注:一个字节可以表示256个字符(2的8次方),ASCII码只用了128个字符(2的7次方)。

2.Unicode

将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,使用Unicode没有乱码的问题,编码0-127的字符与ASCII的编码一样。共有65536个字符(2的16次方)。缺点:一个英文字母和一个汉字都占用两个字节,浪费存储空间。

3.UTF-8

是互联网中使用最广的一种Unicode实现方式,它可以使用1-6个字节表示一个符号,根据不同的符号而变化字节长度。 字母占一个字节,汉字占3个字节。

4.补充

还有其他的编码方式比如 gbk:可以表示汉字,字母使用一个字节,汉字2个字节。 gb2312:可以表示汉字,但是表示范围和使用频率小于gbk。 big5:表示繁体中文。