JavaSE编程基础 深耕数据类型 细节金针菇

125 阅读3分钟

本文已参与[新人创作礼]活动, 一起开启掘金创作之路。

前言

基本语法是学习所有编程语言都必须掌握的基础知识

一个Java程序通常由 数据类型、变量、运算符和控制流程组成

其中数据类型和运算符不仅定义了语言的规范,还决定了可以执行什么样的操作

万丈高楼平地起,不积跬步无以至千里

今天,咱就深耕一下数据类型,踩踩里面的深坑

打磨细节,铁杵磨成针

数据类型分类

Java的数据类型主要分为两类:

  • 基本数据类型
  • 引用数据类型

一张图 一目了然

image.png

第一棵金针菇 int整型

细节: 上溢 和 下溢

总所周知,整数类型 int 所占字节4,所占位数:4*8=32

那么,这个数字的范围就是 从 -21474836482147483647

怎么算的呢,就是 -(2的32次方) 到 (2的32次方)-1

姑且不理这些底层这些计算

今天的重点是上溢和下溢

上溢

比如现在,我有一个int变量 A,里面存的数是2147483647,这个时候给他+1,那么A会变成什么样呢?

int A = 2147483647;
A = A + 1;
System.out.println(A);

答案是-2147483648,因为超出了int能容纳的范围,它直接回到了最初的起点

下溢

同理,

比如现在,我有一个int变量 B,里面存的数是-2147483648,这个时候给他-1,那么B会变成什么样呢?

int B = -2147483648;
B = B - 1;
System.out.println(B);

答案是2147483647,因为超出了int能容纳的范围,它直接回到了最初的终点

第二棵金针菇 浮点型

double和float

首先,Java浮点型默认为double

因此要声明一个变量为float类型,必须要再后面加上f

比如

double d = 888.8;
float f = 888.8f;

判断相等的精度丢失问题

我们跑一个程序就知道

package com.kzb.helloworld;

public class demo {
    public  static void main(String[] args) {
        System.out.println(0.2 == (1.2-1));
        double y = 1.2-1;
        System.out.println(y);
    }
}

image.png

这就是Java浮点型的精度丢失了。

这个时候,我们用 == 去判断他们相等,只能是他们两的底层二进制相等才算相等

怎么解决呢?

大多数情况下,我们认为两个浮点数足够解决,那么他们就是相等了

比如:

package com.kzb.helloworld;

public class demo {
    public  static void main(String[] args) {
        double x = 0.2;
        double y = 1.2-1;
        if (Math.abs(x-y) < 0.000001){
            System.out.println("相等");
        }
    }
}

image.png

咱就是说,你要是可以接受这0.000001的误差,就当他们相等吧

做为一个浮点型实在是太不容易了。

第三棵金针菇 char字符型

这个就记忆一下 a、A、97、65

a的ASCII码是97

A的ASCII码是65

在char里面,你可以用这两种方法定义a字符

char temp1 = 97;
char temp2 = 'a';

给大家一个传送门 ASCII码一览表

第四棵金针菇 boolean布尔类型

在js里面,我们经常随便拿1当true,拿0当false

但是严格的java不可以这样做

其有效值只能是 true 或者 false

记住了哈

谁来了都不管用

只有true or false 好使

image.png