• 初识Java--Java数据类型


    Java数据类型

    java数据类型主要分为基本数据类型引用数据类型
    基本数据类型有四种①整型②浮点型③字符型④布尔型
    字符串类型属于引用型数据类型

    数据类型关键字所占字节范围
    字节型byte1字节-128~127
    短整型short2字节-32768~32767
    整型int4字节-231~231-1
    长整型long8字节-263~263-1
    单精度浮点型float4字节有范围一般不关注
    双精度浮点型double8字节有范围一般不关注
    字符型char2字节0~65535
    布尔型boolean无明确规定true和false

    1.1整型

    整型包括字节型,短整型,整型,长整型
    在Java中,整型int所占字节一直是4字节,长整型long一直是8字节

    字节是计算机表示空间大小的基本单位。

    1字节是由**8位二进制数(bit)**组成,

    // byte型变量所能表示的范围:
    System.Out.println(Byte.MIN_VALUE);
    System.Out.println(Byte.MAX_VALUE);
    //int类型所能表示的范围
    System.Out.println(Integer.MIN_VALUE);
    System.Out.println(Integer.MAX_VALUE);
    //long类型所能表示的范围
    System.Out.println(Long.MIN_VALUE);
    System.Out.println(Long.MAX_VALUE);
    // short型变量所能表示的范围:
    System.Out.println(Short.MIN_VALUE);
    System.Out.println(Short.MAX_VALUE);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.2浮点型

    在java中,小数被默认为double类型,除非明确声明该小数为float类型

    当然,浮点型存在一个弊端

    double x=1.1;
    System.out.println(x * x);
    结果为1.21吗?并不是
    结果为 
    1.2100000000000002
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这时由于浮点数在机器中的存储方式产生的。
    有兴趣可以去看博主先前的文章整数浮点数在内存中的存储

    1.3字符型

    char ch='乐';
    char pc='A';
    
    • 1
    • 2

    计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用** Unicode **表示字符. 因此
    一个字符占用两个字节, 表示的字符种类更多, 包括中文.

    1.4布尔型

    1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.

    与c语言不同的是,Java中布尔类型并不能与int类型互通
    不存在1代表true 0代表false这种情况,也就意味着在程序中,以下程序不能正常运行;

    int a=3int c=6while(a--){
        c++}//这样会报错
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在
    Oracle公司的虚拟机实现中,boolean占1个字节

    二 数据类型转换与提升

    2.1类型提升

    ①在两个操作数中,有一个操作数的类型为double,则另一个操作数也会转换为double类型。
    ②否则,若其中有一个操作数是float类型,则另一个操作数也会转为float类型
    ③否则,若其中有一个操作数是long类型,则另一个操作数也会转为long类型
    ④否则,两个操作数都会被转为int类型进行运算

    因为电脑CPU通常以4个字节从内存中读取,为了硬件上实现方便,将小于四个字节的类型提升为int类型进行运算。

    2.2类型转换

    在类型转换中,会存在类型提升的情况

    1)自动类型转换(隐式)

    代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。
    不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型

    如下代码在运行过程中就自动的发生了类型转换

    int a = 100;
    long b = 10L;
    b = a; // a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
    a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全
    float f = 3.14F;
    double d = 5.12;
    d = f; // 编译器会将f转换为double,然后进行赋值
    f = d; // double表示数据范围大,直接将
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2)强制类型转换(显式)

    如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
    强制类型转换不一定能成功,不相干的类型不能互相转换

    int a = 10;
    long b = 100L;
    b = a; // int-->long,数据范围由小到大,隐式转换
    a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
    float f = 3.14F;
    double d = 5.12;
    d = f; // float-->double,数据范围由小到大,隐式转换
    f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
    a = d; // 报错,类型不兼容
    a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在强制类型转换中,如果一个数值要从一个数据类型强制转换为另一种数据类型,而超过了目标数据类型的范围,就会发生截断,变成另一个完全不同的值
    例如

    byte300//结果为44
    
    • 1

    这时你可能会产生疑惑,明明byte的存储范围是-128~127
    为什么300存入之后得到的值为44,这里就要提到在内存的存储方式了

    在这里插入图片描述
    从 0开始(即00000000)开始,存储127位(即01111111)这时再存储时就会变成10000000这里最高位的1代表符号位,表示负数-128,随着数字的增大,变成-127(10000001),-126,-125…到-1(11111111),再进行下一次轮回从0开始,因为byte只有8位bit位;

    double x=9.985;
    int d=int)x;
    //这里对x截断后,d得到的值为9;
    
    • 1
    • 2
    • 3

    如果想要四舍五入来得到最接近的整数,这时需要调用Math.round方法

    double x=9.985;
    int d=(int)Math.round(x)
    
    • 1
    • 2

    这里d的值就是10了,既然引用了round方法,为什么还要使用int类型强转呢?
    其实是因为round方法的返回类型为long类型,为了防止发生信息丢失,所以我们需要将long类型强转为int类型。
    码字不易,感谢观看
    如果对你有帮助的话,记得点赞👍评论+关注吧

  • 相关阅读:
    如何用VisualStudio编写一个利用滑块绘制扇形的小程序 既可以正向绘制也可以反向绘制
    跳舞机游戏-第13届蓝桥杯Scratch选拔赛真题精选
    小众却又极其实用的5款办公软件,建议收藏转发
    Redis之SDS底层原理解读
    Hadoop入门(三):本地运行模式和完全分布模式,集群分发脚本、远程同步、集群分发
    OpenTiny Vue 支持 Vue2.7 啦!
    基于微信小程序的音乐播放器设计与实现(源码+lw+部署文档+讲解等)
    2 分钟,教你用 Serverless 每天给女朋友自动发土味情话
    【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
    pm命令给某个应用授权限
  • 原文地址:https://blog.csdn.net/2202_75795446/article/details/134035295