Java | 基本数据类型

Java | 基本数据类型,第1张

Java | 基本数据类型

目录

一、整型

二、浮点类型

三、char类型

四、boolean类型

五、编码表


每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(字节)。

Java是一种强类型语言。必须为每一个变量声明一种类型。在Java中一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。

一、整型

整型用于表示没有小数部分的数值,它允许是负数。

类型

存储需求

取值范围

int [整型]

4字节

-2 147 483 648 ~ 2 147 483 647(正好超过20亿)
-231 ~ 231-1

short [短整型]

2字节

-32 768 ~ 32 767
-215 ~ 215-1

long [长整型]

8字节

-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
-263 ~ 263-1

byte [字节]

1字节

-128 ~ 127

Java各整数类型有固定的范围和字段长度,不受具体OS[ *** 作系统]的影晌,以保证java程序的可移植性。

Java的整型常量(具体值)默认为int型,声明long型常量须后加 L 或 l (如400000000000L)。

int 类型最常用,long用于表示大数字。

byte 和 short 类型主要用于特定的应用场合。

  • bit:计算机中的最小存储单位。
  • byte:计算机中基本存储单元。

1 byte = 8 bit

  • 十六进制数值前缀:0X或0x(如0xCAFE)。
  • 八进制数值前缀:0(如010)。
  • 二进制数值前缀:0B或0b(如0b1001)。

从Java 7开始,加上前缀 0b 或 0B 就可以写二进制数。可以为数字字面量加下划线(如1_000_000)。

public class IntDetail{
    public static void main(String[] args) {
        // Java的整型常量(具体值)默认为int型,声明long型常量须后加L或l
        int n1 = 1; // int类型 4字节
        //int n2 = 2L;  // 2L是long类型,直接赋值给int类型会报错
        long n3 = 3L;   // 这样不会报错
    }
}

二、浮点类型

浮点类型用于表示有小数部分的数值。浮点数=符号位+指数位+尾数位

尾数部分可能丢失,造成精度损失(小数都是近似值)。

类型

存储需求

取值范围

float [单精度]

4字节

大约±3.402 823 47E+38F(有效位数为6 ~ 7位)

double [双精度]

8字节

大约±1.797 693 134 862 315 70E+308(有效位数为15位)

与整数类型类似,Java浮点类型也有固定的范围和字段长度,不受具体OS的 影晌。

 Java的浮点型常量(具体值)默认为double型,声明float型变量须后加 f 或 F(如3.14F),也可以在浮点数值后加面添加后缀D或d来表示double类型(如3.14D)

浮点型常量有两种表示形式:

  • 十进制数形式:如:5.12、512.0f、.512 (必须有小数点)
  • 科学计数法形式:如:5.12e2[5.12*10的2次方]、5.12E-2 [5.12/10的2次方]

通常情况下,应该使用double型,因为它比float型更精确。

对运算结果是小数的进行相等判断时,应该是以两个数的差值的绝对值,在某个精度范围类判断

public class FloatDetail{
    public static void main(String[] args) {
        //  Java的浮点型常量(具体值)默认为double型,声明float型变量须后加 f 或 F
        //float num1 = 1.1; // 会报错,float类型需要加上f或者F
        float num2 = 1.1f;
        
        double num3 = 1.1;
        double num4 = 1.1F;
        // 十进制数形式:如:5.12、512.0f、.512 (必须有小数点)
        double num5 = .512; // 等价于0.512
        System.out.println(num5);
        // 科学计数法形式:如:5.12e2[5.12*10的2次方]、5.12E-2 [5.12/10的2次方]
        double num6 = 5.12e2;
        double num7 = 5.12e-2;
        System.out.println(num6);
        System.out.println(num7);
        // 通常情况下,应该使用double型,因为它比float型更精确。
        double num8 = 2.1234567851;
        float num9 = 2.1234567851F;
        System.out.println(num8);
        System.out.println(num9);
        // 浮点数精度问题
        double num10 = 2.7; // 结果:2.7
        double num11 = 8.1 / 3; // 结果:2.6999999999999997
        System.out.println(num10);
        System.out.println(num11);
        if(num10 == num11) {
            // 不会进入该条件判断,因为num10和num11不相等
            System.out.println("相等");
        }
        // 正确的写法    如果差值小于0.0001,则认为相等
        if (Math.abs(num11 - num10) < 0.0001) {
            System.out.println("认为相等");
        }
    }
}

可以使用十六进制数表示浮点数值(如0.125=2-3,可表示成0x1.0p-3),在十六进制表示法中,尾数采用十六进制,p表示指数,指数采用十进制,指数的基数是2

用于表示溢出和出错情况的三个特殊的浮点数值:

  • 正无穷大(Double.POSITIVE_INFINITY)
  • 负无穷大(Double.NEGATIVE_INFINITY)
  • NaN(不是一个数字,Double.NaN)

这三个特殊的值,可以以相应的Float类型的常量表示,在实际应用中很少遇到。

检测一个特定的值是否等于Double.NaN:

if(Double.isNaN(x))

三、char类型

char类型用于表示单个字符,也可以用于表示Unicode字符,是两个字节(可以存放汉字)。

char类型的字面量值要用单引号括起来。

char类型的值可以表示为十六进制值,其范围从u0000到Uffff。

在Java中char的本质是一个整数,在输出时,是Unicode码对应的字符。是可以进行运算的。

字符型存储到计算机中,需要将字符对应的码值(整数)找到,比如 'a':

  • 存储:'a' → 码值97 → 二进制(110 0001) → 存储
  • 读取:二进制(110 0001) → 97 → 'a' → 显示
public class Char01{
    public static void main(String[] args) {
    char c1  = 'a';
    char c2  = 't';
    char c3  = '韩';
    char c4  = 97;
    System.out.println(c1);
    System.out.println(c2);
    System.out.println(c3);
    System.out.println(c4);
    System.out.println("------------------------");
    char c5 = 38889;
    System.out.println(c5);
    char c6 = 'a';
    System.out.println((int)c6);
    // 在 char类型 和 int类型 计算的过程中,
    // char类型 的字符先查询编码表,得到97,再和10求和,结果为107。
    // char类型提升为了int类型。char类型内存2个字节,int类型内存4个字节。
    System.out.println(c6 + 10);
    }
}
 
四、boolean类型 

boolean(布尔)类型有两个值:false 和 true,用来判定逻辑条件,没有null值。占1个字节。整型值和布尔值之间不能进行相互转换。

public class Boolean01{
    public static void main(String[] args) {
        boolean isPass = true;
        if (isPass == true) {
            System.out.println("成绩合格");
        } else {
            System.out.println("成绩不合格,下次努力");
        }
    }
}
 
五、编码表 

就是将文字和一个十进制数进行对应起来组成一张表格。

在计算机的内部都是二进制的0、1数据,编码表可以让计算机直接识别文字。将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII( American Standard Code for Information Interchange 美国标准信息交换码)。

字符码表:

  • ASCII编码表:1个字节,一共128个字符,实际上一个字节可以表示256个字符,只用128个
    • 缺点:不能表示所有字符
  • Unicode编码表:固定大小的编码使用两个字节来表示字符,字母和汉字统一都是占用两个字节,最大表示2的16次方(65536)个字符,编码0-127是和ASCII编码表相同,因此兼容ASCII编码表
    • 缺点:浪费空间
  • utf-8编码表:大小可变的编码表,可以使用1-6个字节表示一个符号,根据不同的符号而变化字节的长度,字母使用1个字节,汉字使用3个字节
  • gbk:可以表示汉字,而且范围广,字母使用1个字节,汉字2个字节
  • gb2312:可以表示汉字,gb2312 < gbk
  • big5码:繁体中文,台湾,香港

特殊字符的转义序列:

转义序列

名称

Unicode值

b

退格

u0008

t

制表

u0009

n

换行

u000a

r

回车

u000d

双引号

u0022

单引号

u0027

反斜杠

u005c

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4970141.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-13
下一篇2022-11-13

发表评论

登录后才能评论

评论列表(0条)

    保存