我们知道Java是强类型语言,那么肯定对应的也就有弱类型语言,以下介绍强类型语言与弱类型语言的区别:

  强类型语言:

    强类型语言也就是强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过转换,那么该变量就永远是此数据类型了。(如:定义一个整型变量叫“a”,程序也只会认为“a”这个变量是整型,并且不可能把它来当作字符来处理。)强类型语言也是类型安全的语言。

  弱类型语言:

    弱类型语言也就是同强类型语言相对的语言,也就是说它的数据类型是可以被忽略的语言。它与强类型语言定义的语言完全是相反的,它的一个变量可以被定义为多种数据类型,而且不用进行转换。(如:定义一个变量“a”,这个“a”可以被赋值整型,又可以被赋值字符型,还可以被赋值为其他类型。)弱类型语言对应的是类型不安全的语言。

  强类型语言在速度上可能会稍逊色于弱类型语言,但是强类型语言带来的严谨性能够有效的避免许多错误的发生。(另外,判断一个语言是不是类型安全的与该语言是不是动态类型的没有关系。)

  (如:Java是静态语言,是强类型语言(是类型安全的语言)。Python是动态语言,是强类型语言(是类型安全的语言)。JavaScript是动态语言,是弱类型语言(是类型不安全的语言)。)

Java中的数据类型:

  Java中的数据类型分为两类:

    基本数据类型(Primitive Type)

    引用数据类型(Reference Type)

  

  基本数据类型:

    基本类型共有八种,其中包括六种数值型与两个非数值型。基本数据类型的信息如下:

Java中基本数据类型
数据类型 大小(单位: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中数据类型的分类的更多相关文章

  1. Java NIO之Java中的IO分类

    前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...

  2. Java中数据类型及其之间的转换

    Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...

  3. Java语言基础(五) Java原始数据类型的分类以及数据范围

    Java原始数据类型的分类以及数据范围 1.基本数据类型分为:整型(byte, short, int, long),浮点型(float, double),字符型(char),布尔型(boolean) ...

  4. Java中数据类型及其之间的转换(转)

    Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...

  5. java中数据类型及运算符的注意事项

    数据类型: boolean 类型数据只允许取值true 或 false(不可以使用0 或非0的整数来代替true和false,区分于C语言). char:Java中用" \u四位十六进制的数 ...

  6. Java中的锁分类

    在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级 ...

  7. Java中的锁分类与使用

    1. Java锁的种类 在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁.读写锁等等,非常繁多,在此做一个总结.介绍的内容如下: 乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/ ...

  8. Java中数据类型默认转换和强制类型转换

    默认转换: a:由低到高一次为:(byte   short    char  )---int ---long ---float --- double b:注意:byte   short    char ...

  9. java中数据类型的范围

    前言:最近:本菜鸡在准备pat,可以每次遇到数据类型的时候都得去查找范围,因此本着学习的目的,来总结一下java中的数据类型. 因此我用mindManager做了一个思维图

随机推荐

  1. linux系统快速搭建ftp服务器——实现匿名用户和创建用户访问服务器

    一.准备工作: linux系统为CentOS Linux release 7.5.1804 (Core)  可以使用 lsb_release -a  命令查看 window系统中安装 SecureCR ...

  2. 阿里云虚拟主机MYSQL加密长度16位变61位

    将网站迁移到阿里云虚拟主机后, 用户登录都提供密码错误, 一查询才发现MYSQL PASSWORD加密结果不致, 只有16位, 解决办法,在执行PASSWORD查询前,执行set old_passwo ...

  3. eclipse设置maven web项目打包

    如图:eclipse下的maven web项目,打包部署到本地tomcat时,需要关注的2个方面: 1. src/main/webapp目录下的文件,打包到/ 根路径下 2. 添加maven 依赖,打 ...

  4. linux运维、架构之路-Kickstart无人值守

    一.PXE介绍          PXE全名Pre-boot Execution Environment,预启动执行环境:通过网络接口启动计算机,不依赖本地存储设备或本地已安装的操作系统:Client ...

  5. 状态管理工具对比vuex、redux、flux

    1.为什么要使用状态管路工具  在跨层级的组件之间传递信息,尤其是复杂的组件会非常困难.也不利于开发和维护,这时我们就a需要用到状态管理工具.     2.Flux

  6. sql2008 误操作还原至指定时间点

    --drop database db --创建一个测试库 create database db go --备份一个完整备份文件 backup database db to disk = 'd:\db. ...

  7. mysql UNIQUE约束 语法

    mysql UNIQUE约束 语法 作用:UNIQUE 约束唯一标识数据库表中的每条记录. 江苏大理石平台 说明:UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证.PRI ...

  8. 【bzoj3195】【 [Jxoi2012]奇怪的道路】另类压缩的状压dp好题

    (上不了p站我要死了) 啊啊,其实想清楚了还是挺简单的. Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期 ...

  9. Dmango cxrf 自定义分页 缓存 session 序列化 信号量 知识点

    参考https://www.cnblogs.com/wupeiqi/articles/5246483.html

  10. react 类样式的一些使用方法

    在 css类不想使用穿透的状态,可以再webpack配置  modules:true,它位于css-loader下,此外调用css的类时可能会自动生成一个hash值,这时候如果想显示本来的名字,可以打 ...