Java数据类型与变量

先赞后看,养成习惯!!!添加链接描述 ^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力,点赞后不要忘记关注我哦

个人主页:伯明翰java

文章专栏:JavaSE

如有错误,请您指正批评 ^ _ ^

总览:

  • Java的数据类型只有两大类:8大基本数据类型与引用数据类型。其中基本数据类型又被称为值类型。
  • 基本数据类型只能存自己类型的值,无其他额外的功能。

基本数据类型

类型概述

  • 六种数字类型
    • 四种整数型:byte,short,int,long
    • 二种浮点型:float,double
  • 一种字符类型:char
  • 一种布尔类型:boolean

    char类型的数据可以存储任何字符
    float,double不能用来表示精确的值,运算不精确------>解决方案:BigDecimal。创建BigDecimal对象的方式:
  • BigDecimal(double val) : double类型的数据作为参数,交给BigDecimal对象【不用,因为double本身不精确】

基本数据类型和引用数据类型的区别

  • 存储方式:基本数据类型直接存储值,而引用数据类型存储的是对象的引用(内存地址)
  • 内存分配:基本数据类型在栈上分配内存,引用数据类型在堆上分配内存(具体内容存放在堆中,栈中存放的是其具体内容所在内存的地址)。栈上的分配速度较快,但是内存空间较小,而堆上的分配速度较慢,但可以分配更大的内存空间
  • 默认值:基本数据类型会有默认值,例如int类型的默认值是0,boolean类型的默认值是false。而引用数据类型的默认值是null,表示没有引用指向任何对象
  • 复制操作:基本数据类型进行复制时,会复制该变量的值。而引用数据类型进行复制时,只会复制对象的引用,两个变量指向同一个对象
  • 参数传递:基本数据类型作为方法的参数传递时,传递的是值的副本,不会修改原始值。而引用数据类型作为方法的参数传递时,传递的是对象的引用,可以修改对象的属性或状态
  • 比较操作:基本数据类型使用进行比较时,比较的是值是否相等。而引用数据类型使用进行比较时,比较的是引用是否指向同一个对象,如果要比较对象的内容是否相同,需要使用equals()方法
    Java的基本数据类型对应的包装类对基本数据类型进行了封装,使其具有了对象的特性,可以调用方法和类型转换等操作。

基本数据类型与包装类区别

  • 存储方式:基本类型直接存储值,而包装类型存储的是对应基本类型值的对象。
  • 空值处理:基本类型没有空值(null)的概念,而包装类型可以将null作为有效值来表示缺失或无效值。
  • 默认值:基本类型有默认值,例如int类型的默认值是0,boolean类型的默认值是false。而包装类型的默认值是null。
  • 对象操作:基本类型不能直接调用方法,而包装类型可以调用对应的方法,例如Integer类的intValue()方法可以获取保存在Integer对象中的值。
  • 自动装箱/拆箱:基本类型和包装类型之间可以进行自动装箱和拆箱的转换。自动装箱是指将基本类型的值自动转换为对应的包装类型对象,如int 转Integer,Integer integer = 100,底层调用了Interger.valueOf(100)方法;而自动拆箱则是将包装类型对象自动转换为基本类型的值。
  • 泛型支持:泛型只能使用引用类型,不能直接使用基本类型。因此,当需要在泛型中使用基本类型时,需要使用对应的包装类型。
  • 比较方式:基本类型使用进行比较时,比较的是值是否相等。而包装类型使用进行比较时,比较的是引用是否指向同一个对象,而不是比较值是否相等。若要比较包装类型的值是否相等,需要使用equals()方法。

数据类型转换

自动类型转换(隐式)

⾃动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会⾃动进⾏处理。特点:数据范围⼩的转为数据范围⼤的时会⾃动进⾏。

java 复制代码
System.out.println(1024); // 整型默认情况下是int 
System.out.println(3.14); // 浮点型默认情况下是double 
int a = 100;
long b = 10L;
b = a; //int 类型的值 ⾃动转换为了long类型 
float f = 3.14F;
double d = 5.12;
d = f; //float 类型的值 ⾃动转换为了double 类型 

强制类型转换(显式)

强制类型转换:当进⾏操作时,代码需要经过⼀定的格式处理,不能⾃动完成。特点:数据范围⼤的到数据范围⼩的。

java 复制代码
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, 数据范围由⼤到⼩,需要强转,否则编译失败 
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换 
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显⽰转换,否则报错 
相关推荐
一路往蓝-Anbo2 小时前
【第13期】中断机制详解 :从向量表到ISR
c语言·开发语言·stm32·单片机·嵌入式硬件
渣渣盟2 小时前
Linux邮件服务器快速搭建指南
linux·服务器·开发语言
想用offer打牌2 小时前
如何开启第一次开源贡献之路?
java·后端·面试·开源·github
BD_Marathon2 小时前
Promise基础语法
开发语言·前端·javascript
小许学java2 小时前
Spring原理
java·spring·生命周期·作用域·原理
教练、我想打篮球3 小时前
122 Hession,FastJson,ObjectInputStream的序列化反序列化相同引用的处理
java·config·utils
Aotman_3 小时前
JavaScript MutationObserver用法( 监听DOM变化 )
开发语言·前端·javascript·vue.js·前端框架·es6
酷柚易汛3 小时前
酷柚易汛ERP 2025-12-26系统升级日志
java·前端·数据库·php
侠客行03173 小时前
Mybatis入门到精通 一
java·mybatis·源码阅读