java基本数据类型

整数类型

类型占用空间表数范围
byte1字节=8bit-128~127
short2字节-215~215-1
int4字节-231~231-1
long8字节-263~263-1
  • long类型的变量赋值时,需要在数字后面加上Ll(小写L)
  • java中的整数类型(简称:整形),默认是int类型
  • 开发中一般都使用int,只在整数过大时才使用longbyteshort一般不用。
public class IntegerTest {
    public static void main(String[] args) {
        // byte, short, int, long
        byte a = 10;
        short b = 20;
        int c = a + b;
        long d = 100000000000L;
        System.out.println(c);
    }
        
}

补充:

  1. 字节(byte):是表示计算机容量的基本单位
  2. 位(bit):是数据存储的最小单位
  3. java中默认就表示,给变量赋的值,默认是某种类型
  4. 转换关系:
    • 1 Byte = 8 bit
    • 1 KB = 1024 Byte
    • 1 MB = 1024 KB

浮点类型

类型占用空间表数范围
float4字节-3.403E38~3.403E38
double8字节-1.798E308~1.798E308
  • 浮点数通常有两种表数形式:
    • 十进制形式:0.1、0.2f、3.0F、.3(可以没有0,但要有小数点)
    • 科学计数法形式:1.25E2、1.24e2、1.25E-2
  • float:单精度浮点数,尾数可以表示到小数点后7位。大多数情况下,精度难以满足要求。
  • double:双精度浮点数,尾数可以表示到小数点后15到16位。也是java默认的浮点数类型。
  • 给float变量赋值时,需要在小数末尾加上fF后缀。

自己定义小数时,最好也使用double类型。

public class FloatTest {
    public static void main(String[] args) {
        // float,double
        float f1 = 1.0f;
        float f2 = .23F; // 0.23

        double d1 = 1.0;
        double d2 = .23; // 0.23

        double d3 = 1.0e-6; // 1.0 x 10^-6
        double d4 = 1.0E6; // 1.0 x 10^6

        // 精度测试
        // 测试1
        System.out.println(0.1 + 0.2);

        // 测试2
        float f3 = 123123123123f;
        float f4 = f3 + 1;
        System.out.println(f3);
        System.out.println(f4);
        System.out.println(f3 == f4);
    }
}

结果:

0.30000000000000004
1.23123122E11
1.23123122E11
true

补充:
java提供的float和double表示的精度都不高。如果要求小数计算后,精确度不丢失需要使用专门的BigDecimal类。

字符类型

  • char:字符类型,占用2字节。
  • 使用Unicode编码,可以存储字母、汉字、标点符号等。
  • 字符有三种形式:
    • 直接由''括起来,形如:'a''中'','
    • 直接使用Unicode值表示,形如'\u0023'表示符号#。其中,从\u0000`\u007f`为`ASCII`字符,从`\u0080`\uffffUnicode字符
    • 具有特殊意义的字符,如\n表示换行符,当读到这个字符时,语句自动换行。
public class CharTest {
    public static void main(String[] args) {
        char ch = 'A';
        char ch2 = '\n';
        char ch3 = '\u0023'; // 这种以\开头的字符,被称为转译字符。当系统接收到这种字符时,会自动对其进行翻译。
        //char ch3 = 'AB'; //error
        //char ch4 = ''; //error

        System.out.print(ch);
        System.out.print(ch2);
        System.out.println(ch3);

    }
}

输出:

A
#

补充:
字符集:像ASCIIUnicode等都是常见的字符集。
应用自:https://www.runoob.com/w3cnote/ascii.html
在这里插入图片描述
ASCII字符集中的字符可以直接用数字表示,当然,Unicode编码也可以。
java会自动将数字对应到ascii码表中的字符,反之亦然。因此,java中的char类型是可以当作数字进行计算的。如'a' + 1就是字符'b'

public class CharTest {
    public static void main(String[] args) {
        char ch = 'a' + 1;
        System.out.println(ch);
    }
}

输出:

b

布尔类型

  • boolean:布尔类型。
  • 只有两个值,truefalse,表示。(java与C不同,不能用数字代替布尔值)

boolean常用在循环控制语句中,也基本只用在循环控制语句中。

public class CharTest {
    public static void main(String[] args) {
        boolean b = true;

        System.out.println(b);

    }
}

输出:

true

注意:虽然输出是一个字符串,但在代码中的用处和意义都与字符串无关。

基本数据类型间的运算规则

这里只讨论7种基本数据类型之间的运算规则,其中不包含boolean类型。因为,boolean类型不能用于运算。
基本数据类型之间的运算规则有两种:

  1. 自动类型提升:当容量小的变量与容量大的变量之间进行运算时,结果自动转换为容量大的类型。
  2. 强制类型转换:无视自动类型转换的规则,进行强制的类型转换。可用于子类型向父类型的转换

说明:容量的大小指的是数据类型的表数范围的大小。并不是数据类型占用内存的大小。如float类型的表数范围就大于long类型。
补充:强制类型转换可以兼容自动类型转换。可以进行自动类型转换的地方,如果使用了强制类型转换也没问题。

自动类型提升

容量小的类型变量可以直接向容量大的赋值。
赋值顺序:int > long > float > double
特殊情况:byte、short、char运算后的结果都会自动转换成int

public class VariableTest{
    public static void main(String[] args){
        int i1 = 10;
        long l1 = i1;
        float f1 = l1;

        // 运算
        long l2 = i1 + l1;
        float f2 = l1 + f1;

        // 特殊情况1:
        byte b1 = 10;
        short s1 = 12;
        int i2 = b1 + s1; // 容量比int小的类型进行运算时,会默认转换成int类型。

        // 特殊情况2:
        byte b2 = 12;
        char c1 = 'a';
        int i3 = b2 + c1; // 这里同样会默认转换成int类型。
        // char c2 = b2 + c1; // 报错

        //======================
        // 情况1:
        long l3 = 123L;
        long l4 = 123; // 这里虽然不会报错,但其实这里进行了一次自动类型提升。int ----> long

        // 情况2:
        float f3 = 12.3F;
        // float f4 = 12.3; // 报错。这里类似于将double值转为float类型。不符合自动类型提升的规则。

        // 情况3:
        byte b3 = 12;
        // 规则1:java中整数常量参与运算时会被识别为int类型进行运算。(赋值时没有这种规则)
        int i4 = b3 + 1;
        // 规则2:java中小数常量参与运算时会被识别为double类型。
        double d1 = b3 + 12.3;

        // 补充:为什么标识符不能以数字开头?原因为了“自洽”
        /*
        int 123L = 12; // 如果可以数字开头
        long l5 = 123L; // 这种情况下会造成歧义。
        */
    }
}

强制类型转换

使用格式:数据类型A 标识符 = (数据类型A)数据类型B的数据;
其中()被称为强转符。符号内指明要转换的目标类型。

public class VariableTest{
    public static void main(String[] args){
        long l1 = 123L;
        int i1 = (int) l1;
        int i2 = (int) 12.3;
        
        float f1 = (float)i1; // 编译也可以通过
    }
}
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值