Java中数据类型的分类
我们知道Java是强类型语言,那么肯定对应的也就有弱类型语言,以下介绍强类型语言与弱类型语言的区别:
强类型语言:
强类型语言也就是强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过转换,那么该变量就永远是此数据类型了。(如:定义一个整型变量叫“a”,程序也只会认为“a”这个变量是整型,并且不可能把它来当作字符来处理。)强类型语言也是类型安全的语言。
弱类型语言:
弱类型语言也就是同强类型语言相对的语言,也就是说它的数据类型是可以被忽略的语言。它与强类型语言定义的语言完全是相反的,它的一个变量可以被定义为多种数据类型,而且不用进行转换。(如:定义一个变量“a”,这个“a”可以被赋值整型,又可以被赋值字符型,还可以被赋值为其他类型。)弱类型语言对应的是类型不安全的语言。
强类型语言在速度上可能会稍逊色于弱类型语言,但是强类型语言带来的严谨性能够有效的避免许多错误的发生。(另外,判断一个语言是不是类型安全的与该语言是不是动态类型的没有关系。)
(如:Java是静态语言,是强类型语言(是类型安全的语言)。Python是动态语言,是强类型语言(是类型安全的语言)。JavaScript是动态语言,是弱类型语言(是类型不安全的语言)。)
Java中的数据类型:
Java中的数据类型分为两类:
基本数据类型(Primitive Type)
引用数据类型(Reference Type)

基本数据类型:
基本类型共有八种,其中包括六种数值型与两个非数值型。基本数据类型的信息如下:
| 数据类型 | 大小(单位:bit/位) | 所属包装类 | 最小范围 | 最大范围 |
| byte | java.lang.Byte | -128 | +127 | |
| short | 2byte = 16 | java.langShort | -32768 | +32767 |
| int | 4byte = 32 | java.lang.Integer | -2^31 | +2^31-1 |
| long | 8byte = 64 | java.lang.Long | -2^63 | +2^63-1 |
| float | 4buye = 32 | java.lang.Float | -3.4 * 10^38 | +3.4 * 10^38 |
| double | 8byte = 64 | java.lang.Double | -1.7 * 10^308 | +1.7 * 10^308 |
| char | 2byte = 16 | java.lang.Character | ||
| boolean | 所占大小不明确 | java.lang.Boolean | 只有"true"和"false"两个取值 | |
(注解:内存的存储最小单位是“bit/位”,1byte/字节 = 8bit/位)
(注意:在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,boolean类型没有给出明确的占用字节数,因为对虚拟机来说根本就不存在 boolean 这个类型,在虚拟机中boolean类型的值:false/true是用0/1来表示的,所以不确定。原因如下:)
大小为1bit:
boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中只需要1位(bit)即可存储,位是计算机最小的存储单位。
大小为1byte:
虽然编译后1和0只需占用1位空间,但计算机处理数据的最小单位是1个字节,1个字节等于8位,实际存储的空间是:用1个字节的最低位存储,其他7位用0填补,如果值是true的话则存储的二进制为:0000 0001,如果是false的话则存储的二进制为:0000 0000。
大小为4byte:
来源是《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。
显然第三条是更准确的说法,那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗。使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。所以boolean类型没有给出精确的定义,《Java虚拟机规范》给出了4个字节,和boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。
整数类型:
Java中整数类型一般默认为int型,整型有四种表示形式:①二进制(锋二进一)、②八进制(锋八进一)、③十进制(也就是我们生活中所表达的类型,锋十进一)、④十六进制(锋十六进一);
(注意:十六进制从第十位开始就不是数字了,而是字母,如:10就为A,11为B,16为10,28为1C)
声明long型需要在后面加上“L”,如:long a = 5555555555L;
(注意:若声明了long类型,且该值在int范围内,则后面可以不加“L”)
浮点类型:
Java中浮点类型一般默认为double型
float:单精度浮点(小数点后可精确到7位有效数字)
double:双精度浮点(小数点后可精确到float的二倍有效数字)
声明float型需要在后面加上“f”或“F”,如:3.14f 或 3.14F;
(注意:浮点类型存在舍入误差,如果需要不产生误差的小数类型用来精确计算可以使用java.math包下的BigDecimal类)
字符型:
我们知道Java中的字符是基于Unicode码表的,所以字符型是用来表示Unicode编码中的字符的,范围在:“0 - 65535”,也就是说char也可以用数字来表示;
布尔型:
boolean型只有两个值,true(正确/真)和false(错误/假);一般用boolean来做判断或者接收判断结果;
引用数据类型:
引用类型分别有:
①类
②接口
③数组
可能有的人会问了,那Java中就没有字符串类型吗,只有单字符类型?
答案:不是的,Java中也有字符串类型,而且与C/C++一样都是String,只不过在Java中String(字符串类型)是作为一个类来实现的,也就是说,Java中String类型是属于引用类型的,属于类。
可以这样理解:只要不是基本数据类型的八种,以外的都是属于引用数据类型的。
Java中数据类型的分类的更多相关文章
- Java NIO之Java中的IO分类
前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...
- Java中数据类型及其之间的转换
Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...
- Java语言基础(五) Java原始数据类型的分类以及数据范围
Java原始数据类型的分类以及数据范围 1.基本数据类型分为:整型(byte, short, int, long),浮点型(float, double),字符型(char),布尔型(boolean) ...
- Java中数据类型及其之间的转换(转)
Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...
- java中数据类型及运算符的注意事项
数据类型: boolean 类型数据只允许取值true 或 false(不可以使用0 或非0的整数来代替true和false,区分于C语言). char:Java中用" \u四位十六进制的数 ...
- Java中的锁分类
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级 ...
- Java中的锁分类与使用
1. Java锁的种类 在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁.读写锁等等,非常繁多,在此做一个总结.介绍的内容如下: 乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/ ...
- Java中数据类型默认转换和强制类型转换
默认转换: a:由低到高一次为:(byte short char )---int ---long ---float --- double b:注意:byte short char ...
- java中数据类型的范围
前言:最近:本菜鸡在准备pat,可以每次遇到数据类型的时候都得去查找范围,因此本着学习的目的,来总结一下java中的数据类型. 因此我用mindManager做了一个思维图
随机推荐
- python模块与包的详解
一模块 1.什么是模块? 常见场景:一个模块包含python定义和声明的文件,文件名就是模块名字加上.py的后缀 2.为何要是用模块 如果你退出python解释器然后重新进入,那么你之前定义的函数或者 ...
- solaris硬盘格式化分区
创建EFI分区及挂载文件系统的过程: # format AVAILABLE DISK SELECTIONS: 0. c1t0d0 <LSI-MR9261-8i-2.12-557.86GB> ...
- oracle date函数
常用的时间格式 在oracle中有 yyyy-mm-dd hh24:mi:ss 而在Java中有些区别 为yyyy-MM-dd HH:mm:ss 这点还是经常容易模糊的.相信很多人都有过统计某些数据 ...
- 配置apache运行cgi程序
配置apache运行cgi程序 文章目录 [隐藏] ScriptAlias目录的CGI ScriptAlias目录以外的CGI 配置apache运行cgi程序可分为两种情况,一是ScriptAlias ...
- HDU 5418 Victor and World (状态压缩dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题目大意:有n个结点m条边(有边权)组成的一张连通图(n <16, m<100000 ...
- Python---进阶---文件操作---搜索文件和保存搜索结果
### 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在,如果遇到文件夹,则进入该文件夹继续搜索 - input 去接受用户输入的文件名和开始搜索的路径 - os.path.isdi ...
- 面试题常考&必考之--js中的难点!!!原型链,原型(__proto__),原型对象(prototype)结合例子更易懂
1>首先,我们先将函数对象认识清楚: 补充snow的另一种写法: var snow =function(){}; 2>其次:就是原型对象 每当我们定义一个函数对象的时候,这个对象中就会包含 ...
- php shuffle()函数 语法
php shuffle()函数 语法 作用:把数组中的元素按随机顺序重新排序:富瑞华 语法:shuffle(array) 参数: 参数 描述 array 必需.规定要使用的数组. 说明:若成功则返回 ...
- 放一道比较基础的LCA 的题目把 :CODEVS 2370 小机房的树
题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子, ...
- monit-日志监控工具
前段时间,CTO下达了一个brief,需要搭建monit日志监控应用,匹配日志中的异常信息,自动发送邮件/微信告警.具体的要求如下: 1.监控***项目的各个应用,nginx的日志,匹配到错误时发送告 ...