• java数据类型——基本数据类型&引用数据类型


    前言

    开局一张图:

    在这里插入图片描述

    基本数据类型

    1.整数型,浮点型,字符型,布尔型

    内置数据类型,分为四类八种

    四类分别是整数型,浮点型,字符型,布尔型。

    数据类型关键字描述范围
    整数型byte8位有符号的,默认值为0-128(- 2 7 2^7 27)~ 127( 2 7 2^7 27-1)
    整数型short16位有符号的,默认值为0- 2 15 2^{15} 215 ~ ( 2 15 2^{15} 215-1)
    整数型int32位有符号的,默认值为0- 2 31 2^{31} 231 ~ ( 2 31 2^{31} 231-1)
    整数型long64位有符号的,默认值为0L- 2 63 2^{63} 263 ~ ( 2 63 − 1 ) 2^{63}-1) 2631)
    浮点型float单精度、32位,默认值为 0.0f-3.4e-38 ~ 3.4e+38)
    浮点型double8位有符号的,默认值为0.0d-1.79e+308 ~ 1.79e+308
    字符型char单一的 16 位 Unicode 字符,默认值为’u0000’0 ~ 65535
    布尔型boolean表示一位的信息,默认值为false只有 true 和 false

    注意long类型和float类型需要加L或F标识(小写大写均可)

    long a = 999999L;
    float b =2.3f;
    
    • 1
    • 2

    2.整型存储(原码,反码,补码)

    (1)原码

    将最高位作为符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)

    +7的原码为: 00000111
    -7的原码为:  10000111

    (2)反码

    一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,其余各位是对原码取反。

    +7的反码为: 00000111
    -7的反码为:  11111000

    (3)补码

    —个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为1,其余各位是对原码取反,然后整个数加1。

    +7的补码为: 00000111
    -7的补码为:  11111000+1=11111001

    (4)补码转原码

    已知一个数的补码,求原码的操作分两种情况:

    (1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码

    (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。
    (也可以先将补码二进制减去1,再对除了符号位的其余各个位取反)

    (5)总结

    • 最高位为符号位,0表示正数,1表示负数
    • 正数的原码,反码和补码都一样,三码合一
    • 负数的反码:符号位保持不限,其他位取反
    • 负数的补码:补码 + 1
    • 0的反码和补码都是0
    • 计算机的运算的时候,都是将原码转成补码进行运算的

    引用数据类型

    简单记忆的角度,可以把基本数据类型(8种)以外的都可以看成引用数据类型,所以常见的class类,数组,字符串都是引用数据类型

    下面来看一下两者的具体区别:

    1.从内存角度分析

    首先基本数据类型开辟的是栈内存,并且变量存储的是真实的数据

    在这里插入图片描述

    引用数据类型,开辟栈空间和堆空间,变量存储的是地址值,是使用了其他空间的数据

    在这里插入图片描述

    总结一下——从内存的角度去理解

    • 基本数据类型:数据是存储在自己的空间;
    • 引用数据类型:自己空间中存储的是地址值,引用数据类型有两块存储空间,一个在栈中,一个在堆中,栈中存放的是堆中的地址,如数组,字符串String。

    2.从赋值传递的角度

    对象、数组都是引用数据类型,使用new关键字创建出来的类型都是引用数据类型。所有引用类型的默认值都是null

    在这里插入图片描述

    一定要注意基本数据类型和引用数据类型的赋值,基本数据类型,赋的是真实值,所以赋值后不改变原来的值,但引用数据类型赋的是地址值,修改赋值后的,会影响原来的。

    在方法值传递时:

    方法在传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实参的值
    方法在传递引用数据类型时,传递的是地址值,形参的改变,影响实参的值

    public static void main(String[] args) {
    	Student s1 = new Student("zhangsan",23);
    	Student s2 = s1;
    	
    	s2.setAge(21);
    	
    	s1.show(); // show的功能是输出年龄和姓名
    	s2.show();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行结果发现,s1和s2的show一样

    姓名:zhangsan 年龄:21
    姓名:zhangsan 年龄:21

    另外 数组赋值,字符串比较也是一样

    在这里插入图片描述

    数据类型转换

    整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

    转换从低级到高级

    byte,short,char—> int —> long—> float —> double

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

    基本规则:

    • 取值范围小的,和取值范围大的进行运算,小的会提升为大的,再进行运算
    • byte,short,char 三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算
    • 转换前的数据类型的位数要低于转换后的数据类型
    char c1='a';//定义一个char类型
    int i1 = c1;//char自动类型转换为int
    System.out.println("char自动类型转换为int后的值等于"+i1);
    
    • 1
    • 2
    • 3

    输出:

    char自动类型转换为int后的值等于97

    2.强制类型转换

    条件是转换的数据类型必须是兼容的。

    int i1 = 123;
    byte b = (byte)i1;//强制类型转换为byte
    
    • 1
    • 2

    参考链接:
    https://www.bilibili.com/video/BV17F411T7Ao?p=131&share_source=copy_web&vd_source=fa075f0e5dab81ef7c98b9eb4c47d9a7
    https://www.runoob.com/java/java-tutorial.html

  • 相关阅读:
    vue项目配置环境变量与代理服务器
    免安装版MySQL(解压版)安装详细教程及注意事项
    取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!
    关于面试题
    SSH工具:Xshell正版官方免费版下载,不限制站点数量
    背压backpress:供大于求生产过剩
    【纯享】剑指大厂,22年最强阿里JAVA手册
    近日MODIS无法正常下载
    什么是DTC营销?揭秘最热门的跨境电商模式和有效策略
    springboot集成nacos作配置中心,动态配置不生效
  • 原文地址:https://blog.csdn.net/ji_meng/article/details/126323338