Java八大类型详解

news2024/10/6 14:36:16
  • 整数类型 (4种)

  • 整数的类型
类型占用内存空间范围
byte [字节]1字节-128 ~ 127存放的范围是=>二进制
short [短整型]2字节

-(2¹⁵) ~ 2¹⁵-1

-32768 ~ 32767

int [整形]4字节

-2³¹ ~ 2³¹-1

-2147483648 - 2147483647

long [长整形]8字节-2⁶³ ~ 2⁶³-1

整数类型的使用细节

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

2. Java的整形常量 (具体值) 默认为 int 型, 声明long型常量须后加"I" 或 "L"

3. Java程序中变量常声明为int类型, 除非不足以表示大数,才使用long

4. bit: 计算机中最小存储单位, byte: 计算机中基本存储单元, 1byte = 8 bit。[二进制再详情说, 简单举一个byte 3 和 short 3]

思考题:

long 类型, 有几个 bit

[8 * 8 = 64 bit]

long n = 3; 内存中

浮点类型

  • 浮点型的分类

       

类型占用内存空间空间范围
单精度float4字节

-3.403E38 ~ 3.403E38

双精度double8字节-1.798E308 ~ 1.798E308
  • 说明

1. 关于浮点数在计算机中存放形式的简单说明, 浮点数=符号位+指数位+尾数位

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

浮点类型使用细节

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

2. Java 的浮点类常量(具体值)默认为double型, 声明float型常量, 须后加 'f' 或 'F'

3. 浮点型常量有两种表达形式

     十进制整数型: 如: 5.12   512.0F   .512 (必须有小数点)

     科学计数法形式: 如: 5.12e2 []   5.12E-2 []

        double n6 = 0.512;
        double n7 = .056;  //等价于0.512

        System.out.println(5.12e2); //输出结果:512.0  [5.12的2次方]
        System.out.println(5.12E-2); //输出结果:0.0512   5.12E-2 []

4. 通常情况下, 应该用double型, 因为它比float型更精确. [举例说明]

     double num9 = 2.1234567851;

     float num10 = 2.1234567851F;

  double num9 = 2.1234567851;  //输出结果:2.1234567851
  float num10 = 2.1234567851F;  //输出结果:2.1234567

5. 浮点数使用陷阱: 2.7   和   8.1   /   3    比较 

        double num11 = 2.7;
        double num12 = 8.1 / 3; //2.7
        System.out.println(num11); //2.7
        System.out.println(num12); //接近2.7的小数, 而不是2.7  2.6999999999999997

从数学角度计算是没有问题的, 为什么计算机就出现了.6999999...的情况?

结论:

当我们对运算结果是小数的进行相等判断是, 要小心

错误写法

if( num11 == num12) {
   System.out.println("相等")
}

会发现控制台完全不会输出, 如果要判断

应该是以两个数的差值的绝对值, 在某个精度范围类判断

正确写法

if (Math.abs(num11 - num12) < 0.000001) { //这句话的意思是我要返回num11减去num12它返回的绝对值是多少, 规定它的差值范围在0.000001
    System.out.println("差值非常小, 到我们规定的精度, 认为相等...");
}

细节: 如果是直接赋的值相比较就相等.

字符类型(char)

  • 基本介绍

字符类型可以表示单个字符,字符类型是char, char是两个字节(可以存放汉字),多个字符我们用字符串String

  • 案例演示
        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);//当输出c4的时候, 会输出97表示的字符 => 编码的概念

字符类型使用细节

1. 字符常量是用单引号(' ')括起来的单个字符。例如:

char c1 = 'a';   char c2 = '中';   char c3 = '9';

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

char c3 = '\n';   // '\n'表示换行符

3. 在java中, char的本质是一个整数, 在输出时, 是 unicode码 对应的字符。

http://tool.chinaz.com/Tools/Unicode.aspx


4. 可以直接给char赋一个整数, 然后输出时, 会按照对应的 unicode字符输出 [97]

5. char类型是可以进行运算的, 相当于一个整数, 因为它都对应有 Unicode码。

字符类型本质讨论

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

存储: 'a' ==> 码值 97 ==> 二进制 ==> 存储

读取: 二进制 => 97 ===> 'a' => 显示

2.字符和码值的对应关系是通过字符编码表决定的(是规定的)

  • 介绍一下字符编码表 [ sublime测试 常用的 ]

        ASCII (ASCII 编码表 一个字节表示 , 一个128个字符)

        Unicode (Unicode 编码表 固定的大小的编码 使用两个字节来表示字符, 字母和汉字统一都是占用两个字节, 这样浪费空间)

        utf-8 (编码表, 大小可变的编码, 字母使用1个字节, 汉字使用3个字节)

        gbk (可以表示汉字, 而且范围广, 字母使用1个字节, 汉字2个字节)

        gb2312 (可以表示汉字, gb2312 < gbk)

        big5 码(繁体中文, 台湾, 香港)

https://blog.csdn.net/zzx_mn/article/details/139094055?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139094055%22%2C%22source%22%3A%22zzx_mn%22%7D

布尔类型: boolean

  • 基本介绍

1. 布尔类型也叫 boolean 类型, boolean类型数据只允许取值true和false, 无null

2. boolean类型占1个字节

3. boolean 类型始于逻辑运算, 一般用于程序流程控制 [这个后面会详细介绍]:

if 条件控制语句;

while 循环控制语句;

do-while 循环控制语句;

for 循环控制语句

  • 案例演示:
    public static void main(String[] args) {
//       演示判断成绩是否通过的案例
//        定义一个布尔变量
        boolean isPass = true;
        if (isPass == true) {
            System.out.println("考试通过了");
        } else {
            System.out.println("考试未通过");
        }
    }

使用细节:

在Java里不可以 0 或 非 0 的整数代替 false 和 true, 这点和C语言不同

基本数据类型转换

  • 自动类型转换

介绍

当java程序在进行赋值或者运算时, 精度小的类型自动转换为精度大的数据类型,

这个就是自动类型转换

数据类型按精度(容量)大小排序为(一定要背下来, 这是规则)

一个基本案例:

//       演示基本案例
    public static void main(String[] args) {
//       演示基本案例
        int num = 'a';  //√  char -> int
        double d1 = 80;  //√  int -> double
        System.out.println(num); //97
        System.out.println(d1); //80.0
    }
  • 自动类型转换注意细节

1. 有多种类型的数据混合运算时, 系统首先自动将所有数据转换成容量最大的那种数据类型, 然后再进行运算

    public static void main(String[] args) {
//       有多种类型的数据混合运算时
//       系统首先自动捋所有数据VT转换成容器最大的那种数据类型, 然后再进行计算
        int n1 = 10;
        double d1 = n1 + 1.1;  //结果类型是double

//        float f1 = n1 + 1.1; //这么写是错误的 n1 + 1.1结果是 double

        float f1 = n1 + 1.1F; //加了F 就等于我们告诉了浏览器我们不是double类型, 我们是float类型 所以这么写是对的, 结果类型是float

    }

2. 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据时, 就会报错, 反之就会进行自动类型转换.

//        2. 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据时,
//        就会报错, 反之就会进行自动类型转换.
        int n2 = 1.1; //错误 double -> int

3. (byte, short) 和char之间不会互相自动转换 

4. (byte, short, char 他们三者可以计算, 在计算时首先转换为int类型

//        3. (byte, short) 和 char之间不会相互自动转换
//        当把具体数赋给 byte 时, (1)先判断该数是否在byte范围内, 如果是就可以
        byte b1 = 10; //对的 , byte-128-127
        int n2 = 1; //n2 是int
        byte b2 = n2; //错的, 原因: 如果是变量赋值, 判断类型

5. boolean 不参与转换

6.  自动提示原则: 表达式结果的类型自动提示为 操作数中最大的类型

//        6.  自动提示原则: 表达式结果的类型自动提示为 操作数中最大的类型

        byte b4 = 1;
        short s3 = 100;
        int num200 = 1;
        double num300 = 1.1;

        double num500 = b4 + s3 + num200 + num300;

强制类型转换

  • 介绍

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

  • 案例演示
        int i = (int)1.9; //1
        System.out.println(i); //1, 造成精度损失

        int j = 2000;
        byte b1 = (byte)j; //-48
        System.out.println(b1); //造成 数据溢出输出-48
  • 强制类型转换细节说明

1. 当进行数据的大小从 大——小, 就需要使用到强制转换

2. 强制转换只针对于最近的

   int x = (int)(10*3.5+6*1.5); //对
   int y = (int)10*3.5+6*1.5;  //错

3. char类型可以保存 int 的常量值, 但不能保存int的变量值, 需要强制

        char c1 = 100; //ok
        int m = 100; //ok
//        char c2 = m; //错误
        char c3 = (char)m; //ok
        System.out.println(c3); //100编码对应的值d

4. byte和short, char类型在进行运算时, 当做int类型处理

基本数据类型和String类型的转换

  • 介绍

在程序开发中, 我们经常需要将基本数据类型转成String类型。或者将String类型转换为基本数据类型。

  • 基本类型转String类型

语法: 将基本类型的值+ " " 即可

案例演示:

        int n1 = 100;
        float f1 = 1.1f;
        double d1 = 4.5;
        boolean b1 = true;
        String s1 =n1 + "";
        String s2 =f1 + "";
        String s3 =d1 + "";
        String s4 =b1 + "";
        System.out.println(s1 + " "+ s2 + " "+ s3 + " "+ s4);

  • String 类型转基本数据类型

语法: 通过基本类型的包装类调用parseXX方法即可

案例演示:

        String s5 = "123";
//        会在OOP 讲对象和方法的时候回详情
//        解读 使用 基本数据类型对应的包装类, 的相应的方法, 得到基本数据类型
        int i = Integer.parseInt(s5);
        double v = Double.parseDouble(s5);
        float v1 = Float.parseFloat(s5);
        long l = Long.parseLong(s5);
        byte b = Byte.parseByte(s5);
        boolean b1 = Boolean.parseBoolean("true");
        short i1 = Short.parseShort(s5);
        System.out.println(i + "," +
                           v + "," +
                           v1 + "," +
                           l + "," +
                           b + "," +
                           b1 + "," +
                           i1 );

//        怎么把字符串转成字符char - > 含义是指 把字符串的第一个字符得到
//        解读  s5.charAt(0) 得到 s5字符串的第一个字符 '1'
        System.out.println(s5.charAt(2));

怎么把字符串转成字符char - > 含义是指 把字符串的第一个字符得到
//        解读  s5.charAt(0) 得到 s5字符串的第一个字符 '1'

  • 注意事项:

1. 再将String 类型转为基本数据类型时, 要确保String类型能够转成有效的数据, 比如 我们可以把"123", 转成一个整数, 但是不能把 "hello" 转成一个整数

2. 如果格式不正确, 就会抛出异常, 程序就会终止, 这个问题在异常处理章节中, 会处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1698989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

架构师必考题--软件系统质量属性

软件系统质量属性 1.质量属性2.质量属性场景描述3.系统架构评估 这个知识点是系统架构师必考的题目&#xff0c;也是案例分析题第一题&#xff0c; 有时候会出现在选择题里面&#xff0c;考的分数也是非常高的。 1.质量属性 属性说明可用性错误检测/恢复/避免性能资源需求/管理…

元组的创建和删除

目录 使用赋值运算符直接创建元组 创建空元组 创建数值元组 删除元组 自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 元组&#xff08;tuple&#xff09;是Python中另一个重要的序列结构&#…

异方差的Stata操作(计量114)

以数据集 nerlove.dta 为例&#xff0c;演示如何在 Stata 中处理异方差。 此数据集包括以下变量&#xff1a; tc ( 总成本 ) &#xff1b; q ( 总产量 ) &#xff1b; pl ( 工资率 ) &#xff1b; pk ( 资本的使用成本 ) &#xff1b; pf ( 燃料价格 ) &#xff1b; …

H3CNE-7-TCP和UDP协议

TCP和UDP协议 TCP&#xff1a;可靠传输&#xff0c;面向连接 -------- 速度慢&#xff0c;准确性高 UDP&#xff1a;不可靠传输&#xff0c;非面向连接 -------- 速度快&#xff0c;但准确性差 面向连接&#xff1a;如果某应用层协议的四层使用TCP端口&#xff0c;那么正式的…

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17 需强化知识点 组合问题&#xff1a;感受遍历的横向和纵向 题目 77. 组合 注意path要深拷贝 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result []def backtrac…

Thymeleaf 搭建家居网首页

文章目录 1.引入Thymeleaf sunliving-commodity模块1.在resources目录下引入Thymeleaf 所需资源2.pom.xml引入Thymeleaf依赖3.application.yml 关闭缓存&#xff0c;使页面实时刷新4.在application-prod.yml开启缓存5.编写com/sun/sunliving/commodity/web/IndexController.jav…

VLAN高级特性

1.VLAN聚合 &#xff08;1&#xff09;VLAN聚合产生的技术背景 &#xff08;2&#xff09;VLAN聚合概述 &#xff08;3&#xff09;VLAN聚合的原理 多个Sub-VLAN共享一个网关地址&#xff0c;节约了子网网络地址、子网定向广播地址、子网缺省网关地址&#xff0c;且各Sub-VLAN…

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器 &#xff08;仿真&#xff0b;程序&#xff0b;原理图PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.使用HC-SR04测量液位&#xff0c;LCD1602显示&#xff1b; 2.当水位高于设定上限的时候&#xff0c;对应声光报警报警&am…

【同构字符串】python

思路&#xff1a; 先记录同一个值出现的次数&#xff0c;再将字典中的值取出&#xff0c;比较2个列表即可 代码&#xff1a; class Solution:def isIsomorphic(self, s: str, t: str) -> bool:dit1dict()dit2dict()for i in range(len(s)):if s[i] not in dit1:dit1[s[i…

SQL Server2019安装步骤教程(图文)_最新教程

一、下载SQL Server2019 1.到微软官网下载SQL Server Developer版本&#xff0c;官网当前的2019版本下载需要注册账号。 不想注册的朋友&#xff0c;可以选择从网盘下载&#xff1a;点击此处直接下载 2.下载之后先解压&#xff0c;解压后执行exe安装程序。打开之后的界面如下…

下载 Hugging Face 中的模型文件

下载 Hugging Face 中的模型文件 1. Hugging Face Hub2. ggerganov/whisper.cpp3. 点击图标下载文件4. Clone this model repository5. Using the Hugging Face Client Library6. Using GitReferences 1. Hugging Face Hub The Hugging Face Hub is a platform with over 350k…

linux 常用命令:find grep ps netstat sudo df du rm

rm 命令 删除 -r 是递归参数&#xff08;recursive&#xff09;&#xff0c;用于删除目录及其内容。如果不加这个参数&#xff0c;rm 命令无法删除非空目录。-f 是强制参数&#xff08;force&#xff09;&#xff0c;用于强制删除文件或目录&#xff0c;不会进行任何确认提示…

【fastapi+mongodb】使用motor操作mongodb

上一篇文章&#xff0c;我们在电脑上安装了mongodb数据库。这篇文章&#xff0c;我们在fastapi后端使用motor操作mongodb 如果你还没看过上一篇文章&#xff0c;链接在这里&#xff1a;【MongoDB】安装与使用 安装 motor motor 是一个用于操作 mongodb 数据库的 python 库&a…

【ai】pycharm安装langchain 相关module

pycharm module install 【Python学习 】一篇文章教你PyCharm如何快速安装module 【python】pycharm如何安装python的模块包版本 2024.1.2 RC2 找到当前的虚拟项目 找到解释器 我现在配置为专门为openai-start 准备的3.10 版本+ 号可以找到模块

C++标准库中string的底层实现方式

对于C中 std::string 的一些基本功能和用法&#xff0c;我们应该都很熟悉。但它底层到底是如何实现的呢? 其实在 std::string 的历史中&#xff0c;出现过几种不同的方式。下面我们来一一揭晓。 我们可以从一个简单的问题来探索&#xff0c;一个 std::string 对象占据的内存空…

JavaSE 学习记录

1. Java 内存 2. this VS super this和super是两个关键字&#xff0c;用于引用当前对象和其父类对象 this 关键字&#xff1a; this 关键字用于引用当前对象&#xff0c;即调用该关键字的方法所属的对象。 主要用途包括&#xff1a; 在类的实例方法中&#xff0c;通过 this …

鸿蒙ArkTS声明式开发:跨平台支持列表【触摸事件】

触摸事件 当手指在组件上按下、滑动、抬起时触发。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独…

Spring从零开始学使用系列(四)之@PostConstruct和@PreDestroy注解的使用

如果各位老爷觉得可以&#xff0c;请点赞收藏评论&#xff0c;谢谢啦&#xff01;&#xff01; 文章中涉及到的图片均由AI生成 公众号在最下方&#xff01;&#xff01;&#xff01; 目录 1. 介绍 1.1 PostConstruct概述 1.2 PreDestroy概述 2. 基本用法 2.1 注册CommonAnn…

Docker进入容器查看内容并从容器里拷贝文件到宿主机

工作中需要从docker正在运行的镜像中复制文件到宿主机&#xff0c;于是便将这个过程记录了下来。 &#xff08;1&#xff09;查看正在运行的容器 通过以下命令&#xff0c;可以查看正在运行的容器&#xff1a; docker ps &#xff08;2&#xff09;进入某个容器执行脚本 我…

Pytest对协程异步函数进行单元测试

安装 安装基础包 pytest&#xff0c;pytest-asyncio pip install pytest pytest-asyncio测试&#xff1a; pytest -s -v ./python-code/do-async/aiohttp_session_pytest.py书写规范 类名必须以 Test 开头方法和函数名必须以test开头 class TestAddFunc(object): # 测试…