第一章、变量

1、数据类型

image.png

各个数据类型占用的空间:

数据类型 占用空间(字节)
byte 1
short 2
int 4
long 8
float 4
double 8
boolean 1
char 2

为什么要有基本数据类型呢?基本数据类型可以不采用new的方式创建,因为它们比较常用,直接赋值方式可以存储于栈中,更加高效

2、变量的声明

语法:

数据类型 变量名;
数据类型 变量名 = 变量值;
复制代码

示例:

public class VarType {
    public static void main(String[] args) {
        //记录人的信息
        int age = 30;
        double score = 88.9;
        char gender = '男';
        String name = "king";

        //输出信息, 快捷键
        System.out.println("人的信息如下:");
        System.out.println(name);
        System.out.println(age);
        System.out.println(score);
        System.out.println(gender);
    }
}
复制代码

当变量后面初始化时有"+"号时:

  • System.out.println("100" + 90); //10090
  • System.out.println(90 + 10 + 90); //190
  • System.out.println(90 + 20 + "90"); //11090

3、数据类型详解

不都介绍了,只介绍几个。

3.1 整型

image-20211022100617996

byte和short主要用于操作底层文件,比如读取或者写入文件。

Java相较于C和C++的一点优势是,整型有固定的范围和字段长度,不受具体的操作系统的影响,可移植性强。

Java中Long类型需要加"l"或者"L",否则报错。

bit是计算机的最小存储单位,1byte=8bit。

Java7之后,整型值中间可以加"_"符号,JVM会在编译的时候帮我们去掉。

//Java7之后可以使用下划线表示
int i2 = 4_000_0000;
System.out.println(i2);
复制代码

3.2 浮点型

image-20211022100828954

浮点数 = 符号位+指数位+尾数位

浮点类型容易丢失精度,如果实际业务中使用int精度不满足要求时可以使用BigInteger,同理double/float不足精度时,可以使用BigDecimal。

float类型后面需要加上"f",否则会被认为是double类型的。

浮点类型有两种表示方式,一种直接表示,一种是科学计数法:

float f1 = 5.1f;

float f2 = 1.5e-3f;
System.out.println(f2);
复制代码

很多时候小数除法在计算机不等于它的计算值,比如2.7不等于8.1/3,这是因为二进制表示精度的问题。可以使用Math类的方法计算。

public class DataType01 {
    public static void main(String[] args){
        System.out.println(8.1/3 == 2.7);	//false
	    //如果两个值的差值趋近于无穷小,就认为是相等的
        if (Math.abs(8.1/3 - 2.7) < 0.0000000001){	//true
            System.out.println(true);
        }else {
            System.out.println(false);
        }
    }
}
复制代码

3.3 字符类型

也就是char类型,char类型可以是一个换行符,也可以是一个整数,比如

public class DataType01 {
    public static void main(String[] args){
        char c1 = 97;
        char c2 = 'a';
        char c3 = '\t';
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
    }
}
复制代码

甚至char类型还能进行计算:

public class DataType01 {
    public static void main(String[] args){
        char c1 = 'b';
        c1++;
        System.out.println(c1);	//c
    }
}
复制代码

4、常见字符编码表

计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码";反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密。在解码过程中,如果使用了错误的解码规则,则导致'a'解析成'b'或者乱码。

  • ASCII字符编码:主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号)。

    ASCII编码:将ASCII字符集转换为计算机可以接受的数字系统的数的规则。使用7位(bits)表示一个字符,共128字符;但是7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。

  • Unicode字符编码:包含了非常多的字符,每个字符的编码都不同,所以不会有乱码问题。一个英文字母和汉字都占用2个字节,可能会存在冗余。

  • UTF-8字符编码:是一种针对Unicode的可变长度字符编码定长码),也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,现在使用最广泛。字母占1个字节,汉字占3个字节

5、基本数据类型转换

img

自动类型转换

image-20211022104611702

细节:

  • 多种类型数据计算的时候,会把它们先转换成类型最大的那个
  • byte、short和char之间不会进行自动类型转换
  • byte、short、char类型之间可以进行计算,但先要转成int类型
  • 自动提升原则:计算后,结果转成类型最大的那个

强制类型转换

将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( ),但可能造成 精度降低或溢出,格外要注意。

细节:

  • 强转符号只针对最近的操作数有效,所以一般会在后面数据操作加上括号
  • char类型可以保存int类型的值,但如果保存int类型的变量需要强转

数据类型和String类型转换

//基本类型转String
String s1 = 某基本数据类型的值 + "";

//String转基本数据类型,调用基本数据类型包装类.parse方法即可,如下:
int i1 = Integer.parseInt("123");

//注意String类型不能用这种方式转char类型,因为字符串包含多个字符,可以使用charAt方法
char c1 = s1.charAt(index);
复制代码

猜你喜欢

转载自juejin.im/post/7127945024024608799