Java学习笔记(二)——数据类型及相关细节

(一)Java数据类型

image-20220302113514650

这里需要注意:String在Java里面是属于一个类而不是数据类型。

1、整数类型细节

image-20220302113814202

  • Java的整型常量默认为int型,声明long型常量必须在后面加’l’或者‘L’。
1
long a=1L

2、浮点数细节

  • Java的浮点型常量默认为double类型,声明float型常量,通常在后面加’f’或‘F’
  • 通常情况下,应该使用double型,因为比float型更精确。
  • 浮点数使用陷阱:2.7和8.1/3比较,结果不同。(具体可在计算机组成原理里面了解)
  • 如果涉及浮点数计算,例如除法得到的变量:a = 8.1 / 3。一般用其进行条件判断时,不使用”=”来作条件(2.7和8.1/3比较例子),而是让条件判断为一个范围,例如:
1
2
3
4
5
6
7
8
9
a = 2.7;
b = 8.1 / 3;
if( a = b){
//错误
}
//应该使用以下条件判断:
if(Math.abs(a - b) < 0.00001){
//0.00001这个数字可以自设定,属于精度
}

3、字符类型细节

  • 字符常量使用单引号(’ ‘)括起来的单个字符,而不能使用双引号(会报错?)。例如:
1
char c1 = 'a'; char c2 = '中'; char c3 = "9"
  • Java中允许使用转义字符来将其后的字符转变为特殊字符型常量。
  • Java中,char的本质是一个整数,在输出时,是unicode码对应的字符。所以直接给char赋值一个整数的话,输出时会按照对应的unicode字符输出。
  • char类型是可以进行运算的,因为其都对应有Unicode码

字符类型本质:

  • 存储:‘a’ => 码值97 => 二进制(~)=> 存储
  • 读取:二进制(~)=> 97 => ‘a’ => 显示

(二)字符编码表

  • ASCII(一个字节表示,一共128个字符。实际上一个字节可以表示256个字符,但只用128个)
  • Unicode(使用两个字节表示字符,字母和汉字统一都是两个字节 => 空间浪费
  • utf-8(大小可变,字母使用1个字节,汉字使用3个字节)
  • gbk(可以表示汉字,范围光,字母使用1个字节,汉字2个字节)
  • gb2312(可以表示汉字,gb2312 < gbk(国标扩))
  • big5(繁体中文)

(三)基本数据类型转换

1、自动类型转换

当java程序在进行赋值或运算时,精度小的类型自动转换为精度大的数据类型

数据类型按精度(容量)大小排序为:

1
2
3
char => int => long => float =>double

byte => short => int => long => float => double

2、自动类型转换注意和细节

  • 多种类型的数据混合运算时,系统首先自动将所有数据转换为容量最大(也就是精度最高)的那种数据类型,再进行计算。例如:

    1
    2
    3
    4
    int num2 = 10;
    //float num3 = num2 + 1.2 错误的,因为num2 + 1.2默认结果是double类型
    //float num3 = num2 + 1.2f 正确的
    double num3 = num2 + 1.2
  • (byte、short)和char之间不能进行自动转换

  • byte、short、char三者可以计算,在计算时首先转换为int类型

  • boolean不参与转换

  • 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型

3、强制类型转换

介绍:强制类型转换是自动类型转换的逆过程,就是将容量大的数据类型转换为小的。使用时要加上强制转换符(),但可能造成精度降低或者溢出,应该注意。例如:

1
int i = (int)1.9

4、强制类型转换细节

  • 强制符号只针对于最近的操作数有效,往往会使用小括号提升优先级。

  • char类型可以保存int的常量值,但不能保存int的变量值,需要强转。

    1
    2
    3
    4
    char c1 = 100;//ok
    int m = 100;//ok
    char c2 = m;//错误,不能存int的变量,因为自动转换无法满足从精度高到精度小
    char c3 = (char)m;//ok
  • byte和short类型在进行运算时,当作int类型处理。

5、基本数据类型和String类型的转换

  • 基本类型转String类型:将基本类型的值直接加 + “”
1
2
int n1 = 100;
String s1 = n1 + "";
  • String类型转基本数据类型:通过基本类型的包装类调用parseXX方法即可
1
2
String n1 = "123";
int num1 = Integer.parseInt(s5);
  • String类型转换成字符char:不能用上述用法
1
2
3
//怎么把字符串转成字符char -> 含义是指把字符串的第一个字符得到:
String S1 = "123";
System.out.println(S1.charAt(0));//取出字符串S1的第一个字符"1"

6、基本数据类型和String类型转换的细节

  • 在将String类型转换成基本数据类型时,要确保String类型能能够转换成有效的数据,例如可以把”123”转换成一个整数,但是不能把”hello“转成一个整数。
  • 如果格式不正确,就会抛出异常,程序就会终止(详细见异常处理章节)

(四)Java类的组织形式

image-20220302113243813