首页 > 编程语言 >Java中的基本数据类型和引用数据类型

Java中的基本数据类型和引用数据类型

时间:2023-03-14 21:57:46浏览次数:40  
标签:Java 字节 void 数据类型 引用 默认值 Void 内存

一、基本数据类型:

byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0

short:短整型,在内存中占16位,即2个字节,取值范围-32768~32767,默认值0

int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0

long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L

float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0

double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0

char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空

boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false

二、引用数据类型:

类、接口类型、数组类型、枚举类型、注解类型。

区别:

基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上。

引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。

例如,有一个类Person,有属性name,age,带有参的构造方法,

Person p = new Person("zhangsan",20);

在内存中的具体创建过程是:

1.首先在栈内存中位其p分配一块空间;

2.在堆内存中为Person对象分配一块空间,并为其三个属性设初值"",0;

3.根据类Person中对属性的定义,为该对象的两个属性进行赋值操作;

4.调用构造方法,为两个属性赋值为"Tom",20;(注意这个时候p与Person对象之间还没有建立联系);

5.将Person对象在堆内存中的地址,赋值给栈中的p;通过引用(句柄)p可以找到堆中对象的具体信息。

相关知识:

静态区: 保存自动全局变量和 static 变量(包括 static 全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。

堆区: 一般由程序员分配释放,由 malloc 系列函数或 new 操作符分配的内存,其生命周期由 free 或 delete 决定。在没有释放之前一直存在,直到程序结束,由OS释放。其特点是使用灵活,空间比较大,但容易出错

栈区: 由编译器自动分配释放,保存局部变量,栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁,其特点是效率高,但空间大小有限

文字常量区: 常量字符串就是放在这里的。 程序结束后由系统释放。

补充:

Java 中,大家对 void 应该是相当熟悉了。它表示“空”,所有无返回值的方法都使用它表示返回类型。

public static void main(String[] args) {
    // ...
}

 

void 是一种基本数据类型
而 Void 是 void 封装类型,API 上称其为“占位符(placeholder)”。
看起来,Void 之于 void 类似于 Integer 之于 int。但并非如此,Void 比较特别:

它不可实例化
它没有内置的类型实例,也没有可用的字面值
声明一个 Void 变量通常是没有什么意义的,因为没有可为其赋值的实例,注意不能用 void 为其赋值(void 是类型而不是值)。
Void 变量唯一能持有的是 null。

Void 一个可用的地方是反射判断方法的返回值时,比如:

if(m.getReturnType().equals(Void.TYPE)) {
  // 处理返回值为 void 的方法
}

 

但也不是必需使用Void.TYPE,也可以用void.class。

另外的使用场景一般都和泛型相关,可以参考这里的相关说明。通常也只是提高了代码的可读性。

总结来说,几乎很少会用到 Void 。

标签:Java,字节,void,数据类型,引用,默认值,Void,内存
From: https://www.cnblogs.com/sunny226/p/17216548.html

相关文章

  • JavaWeb-QQZone项目的业务需求、数据库设计等内容
    资料来源于:B站尚硅谷JavaWeb教程(全新技术栈,全程实战),本人才疏学浅,记录笔记以供日后回顾由于是多个视频内容混合在一起,因此只放了第一个链接本文参考价值不高,自我记录......
  • Java蓝桥杯
    1、特殊回文数:123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。publicclassMa......
  • 微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发
    一、前言大家好,我是六哥!又有好长一段时间没更文了,不是我懒,而是确实在更文上,没有以前积极了,这里是该自我检讨的。其实不是我不积极,而是相对更文学习来说,优先级不是最高。......
  • # 909 -「java」一维数组展开+ BFS解决 -蛇梯棋- 最短步进次数 的详细思路
    Tags:中等数组BFSjava 题目链接:909.蛇梯棋 注意事项[题目中的坑]:【"S形"的概念】:题目开头举例的N*N的数组,其内标示的1~N²数字,指代的是......
  • # 92 -「java 」 100-执行速度 - 三步『截取子链表- 递归反转- 拼接』 解题的实现思路
    Tags中等递归链表java 题目链接:92.反转链表II 解题思路[截取子链表+反转+拼接]:以1->2->3->4->5,m=2,n=4为例:【截取】定位到需要反......
  • Java Mybatis 笔记
    MyBatis1、简介1.1什么是MybatisMyBatis是一款优秀的持久层框架;它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获......
  • CFR 反编译 Java 枚举
    CFR到这里下载。运行如下命令使用当前文件夹下的cfr-0.152.jar反编译当前文件夹下的T.class。java-jarcfr-0.152.jarT.class--sugarenumsfalse其中--sugarenum......
  • Java的HashMap
    基于hash值的K-V结构数据容器。重要计算方法计算key的hash值(key==null)?0:(h=key.hashCode())^(h>>>16)利用hash计算tab中的位置p=tab[i=(n-1)&......
  • java变量和常量
    一标识符我们所认识的标识符如:类名HelloWorld标识符的命名规则标识符可以由字母,数字,下划线和和美元符$组成,不能以数字开头标识符严格区分大小写标识符......
  • java实体类之间的转换
    字段相同BeanUtils.copyProperties(item,dto);字段不同通过mapstruct,定义不同的字段名字https://blog.csdn.net/weixin_55806809/article/details/125347999......