7、Java基本数据类型的使用细节探讨(超详细版本)

Java基本数据类型的使用细节探讨


我觉得基本数据类型大家学计算机的应该都懂,但是韩顺平老师讲的基本类型的使用细节我觉得有必要记录一下,重新学的时候才发现有了新的感悟!

一、整数类型

在这里插入图片描述
使用细节:
1、Java各整型类型有固定的范围和字段长度,不受具体OS[操作系统]的影响,以保证Java程序的可移植性。(简单理解就是必须要标准一样,如果不一样的话,不同操作系统下就会产生不一样的结果)<——个人语言🤣不严谨哈

2、Java的整型变量(具体值)默认为int型,声明long型常量须在后面加 ’ l ’ 或 ’ L '。
(这里要注意,不要写成 int a = 5L,我们知道 int 是4字节的,而 long 是8字节的,相当于把8字节的数据硬是放进4字节的空间,肯定放不了滴!相反,把 int 型放进 long 型是放的了的,这是忘记加后缀的情况。)

3、Java程序中变量常声明为 int 型,除非不足以表达大数,才用 long 。(其实就是避免空间浪费啦)

4、bit:计算机中的最小存储单元。
  byte:计算机中基本存储单元,1byte = 8bit。(比较基础的计组知识,一定要记住。)

二、浮点数

在这里插入图片描述
使用细节:
1、面试可能会问:浮点数 = 符号位 + 指数位 + 尾数位
(想了解更清楚的可以看一下这个文章:一文彻底掌握浮点数

2、与整数类型类似,Java浮点类型也有固定的范围和字段长度,不受具体OS的影响。[float 4个字节,double 8个字节]

3、Java的浮点型常量(具体值)默认为double型,声明为float型常量,须后加’ f ‘或’ F '。

float num1 = 1.1F;		//正确
double num2 = 1.1;		//正确
double num3 = 1.1f;		//正确!小精度可以放进大精度的类型里面

最后一条代码可以这样理解:一个1米的小孩在2米的床上睡觉,但是不能在5厘米的床上睡觉(那应该是豌豆公主吧🥰)
补充:记得要加’ f ‘和’ F ',不然报错。
在这里插入图片描述

4、浮点型常量有两种表达方式
①十进制数形式:5.12   512.0f   .512(前面的0可以省略,但必须有小数点)
②科学计数法形式: 5.12e2【5.12 * 102 】  5.12e-2【5.12 / 102】,里面的e也可以换成E
在这里插入图片描述

4、通常情况下,应该用double型,因为它比float型更精确。
在这里插入图片描述
通过上面的结果可以看到,float后面有部分丢失了,所以尽量使用double型。

5、浮点数使用陷阱:2.7 和 8.1 / 3 的比较
先来段代码:

/**
 * @author 颜安青
 */
public class Hello{
    public static void main(String[] args){
        double num1 = 2.7;
        double num2 = 8.1 / 3;

        System.out.println("num1: "+num1);
        System.out.println("num2: "+num2);

        if(num1 == num2)
            System.out.println("num1 == num2");
        else
            System.out.println("num1 != num2");
    }
}

看到这里你是不是觉得 num1 == num2 呢?NoNoNo,错啦,看一下输出结果吧。
在这里插入图片描述
按照我们的数学思维,8.1 / 3 应该是等于2.7的,但是从计算机的角度上看,计算机中对浮点数的表示并非百分百精确的,在表示和计算过程中都有可能丢失精度。并且,8.1这个数本身在计算机中用double类型存储,可能存储成8.100000001,这都是可能的,所以浮点数的运算结果比较是不等的。(个人理解哈,如果想了解的更详细记得去看一文彻底掌握浮点数))

那么怎么判断两个浮点数相等呢?其实我们应该判断的是:两个数之间的差值的绝对值在我们规定的某个精度范围内,只要在范围内就可以近似相等。

if(Math.abs(num1-num2) < 0.000001){			//0.000001是可以自己规定的
	System.out.println("差值非常小,到规定的精度范围内,认为近似相等!");
}

结果:
在这里插入图片描述

三、字符型

Java中字符类型是char,占两个字节(可以存放汉字),多个字符用字符串String。
区分一下:C语言中没有Boolean和String型,并且char类型是占一个字节的,当时我学习的时候也很震惊😄我通过一些资料的查询,就简单理解为:不同语言编译器用的编码集不一样,一些类型的所占字节也会随之变化,总结就是类型大小由编译器决定。 <–所以有可能C语言中char类型也会有两个字节,极少数情况。可以看一下别人的回答:char为什么占两个字节

使用细节:
1、字符常量是用单引号(‘’)括起来的单个字符。
在这里插入图片描述
这些是基础,当各位都是会的,不讲很细。

2、Java中还允许使用转义字符’ \ '来将其后的字符转变为特殊字符型常量。

char c = '\n';		//换行

在这里插入图片描述

3、在Java中,char的本质是一个整数。我们要知道一个概念,Java中默认使用的编码是Unicode码,所以输出的是Unicode码对应的字符。

怎么理解呢?我们可以用计算机输入字母、数字、中文、符号等内容,而计算机是用二进制的方式去存储的,所以我们输入的字符每一个都对应着一个独一无二的二进制数,当输入的时候将字符存储为二进制数,当输出的时候将二进制数转换成字符。
‘a’ 对应的十进制是97,这也意味着,我们可以 char c = ‘a’,也可以char c = 97的形式去赋值,也可以进行运算。
想了解字符编码的可以看这几个链接:
⭐⭐超级推荐去看这个:程序员必备:彻底弄懂常见的7种中文字符编码
结合Java详谈字符编码和字符集

这里提示一点,我们的中文其实每一个汉字都有对应的编码,比如大家可以打开一个网站自己去查看汉字对应的编码:Unicode转换
在这里插入图片描述

白框框里面的是中文字符,而黑框框对应的就是Unicode码(来自程序员的浪漫啊❤)

敲重点:面试时问字符类型本质,那该怎么回答呢?
个人理解:字符都有相对应的编码值,字符型通过二进制的形式存储到计算机中,而输出时将二进制数转换成字符显示。
比如’ a ‘:
存储:’ a ’ --> 码值97 --> 二进制(1100001) --> 存储
读取:二进制(1100001) --> 97 --> ’ a ’ --> 显示

补充个小点:平时工作中用的最多的是utf-8编码集,它最灵活了
99%的前端写网页时都会加上,99%的后端工程师新建数据库时都会加上DEFAULT CHARSET = utf8
来个链接拓展:mysql编码问题——charset=utf8你真的弄明白了吗?

四、布尔型

boolean类型数据只允许取值true和false,无null,占一个字节,适用于逻辑运算。

使用细节:
不可以0或非0的整数替代true和false,这点和C语言不同。
在这里插入图片描述

本人正在B站跟着韩顺平老师学Java(非广告),所以做个笔记仅供学习,文章虽标为原创,但大体思路是韩顺平老师的授课思路,在此基础上加上了自己的理解,不喜勿喷哦。
大家一起学,一起进步!!
各位宝子们如果觉滴还不错的话,可以点个赞 or 收个藏 or 打个赏哦,佛系博主一个。

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜安青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值