Java作为一种强类型语言,意味着每一个变量都会有特定的类型,Java共有8种基本类型,其中有4种整型(byte、short、int、long)、两种浮点型(float、double)、1种字符型(char)和一种布尔型(boolean),值得注意的是,虽然字符串String非常常用,但是它却不属于基本类型。

  一、整型

  整型在表示没有小数部分的数值,允许负数(Java中没有无符号类型,即unsigned),计算机中的存储信息的最小单位是位(bit),存储容量的基本计量单位是字节(Byte),一个字节占8个位,整型数据的取值范围根据其存储的位数计算,即2的N次方,例如byte类型占1个字节,占8个位,所以共有256个值,负数包括-128~-1,正数包括0~127。同理,整型数据的存储需求和取值范围如下:

类型 存储需求(字节) 取值范围
byte 1 -128 ~ 127
short 2 -32768 ~ 32767
int 4 约等于-21亿 ~ 21亿
long 8 正常使用中不太可能溢出,范围约为-92亿亿 ~ 92亿亿

  另外在程序中处理整型数据时可能会用到各种类型的写法,以下列出几种常用的:

写法 含义 备注
12345 十进制 与书面相同
12345L 十进制,长整型(long) 如果数值大于int型数据的最大值却没有加L,会报错
012345 八进制 不推荐,易混淆
0x12345 十六进制 二进制数据的另类表示法,便于书写和记忆
0b10010101 二进制 Java 7新加入的写法,之前版本不支持
1_000_000 字面量分割 与书面中1,000,000相同,Java 7新加入的写法,编译器会自动忽略下划线

  另外对比一下使用场景:int为开发中最常用的整型,大多数情况下都是使用int;long类型适用于数值较大的情况,例如当前时间的毫秒数;byte和short使用较为少见,之应用于特定的场合,例如底层文件处理。

  以下是在大体上略一遍源码时的疑问及解答:

 1.Integer.parseInt和Integer.valueOf有什么区别?

  parseInt返回的是int型数据,而valueOf返回的是Integer封装类型,后者可以调用Integer中的API进行其他操作。

 2.Integer.getInteger是干什么用的?

  在日常开发中接触较少,用来获取系统参数的,源码中调用System.getProperty(String key),然后使用decode进行解析

 3.Integer.decode和Integer.valueOf有什么区别

  前者可以解析0x,#等表示的其他进制,而后者只能转换十进制

 还需要注意的地方有,Byte和Short的compareTo是直接计算差值,即a-b,而Integer和Long的compareTo却是返回-1、0和1;Byte、Short、Integer的hashCode()为返回当前数值的int值,而Long类型的处理方法为return (int)(value ^ (value >>> 32));

  二、浮点型

  浮点型表示有小数部分的数值,java中包括float和double两种浮点型数据,float被称为单精度浮点数,而double被称为双精度浮点数。根据Float类的源码可以得知,Float的最大值为0x1.fffffeP+127f(3.4028235e+38f),最小值为0x0.000002P-126f(1.4e-45f),长度为4个字节;而double精度是float的两倍,最大值为0x1.fffffffffffffP+1023(1.7976931348623157e+308),最小值为0x0.0000000000001P-1022(4.9e-324),长度为8个字节。

  由于float的有效位数只有6~7位,不能满足日常开发工作中的需求,所以在开发过程中大部分使用double型数据,而写法上float型数据需要在数值后加F或f,例如2.13F和3.14f,而浮点型默认则为double型,例如2.13和3.14,当然也可以在后边加上D或者d。在十六进制表示中,浮点型的写法是0x1.****p*,原因推测是因为e是十六进制中的数字表示,所以用p来替换。

  另外值得注意的是,浮点型数据不适用于禁止出现舍入误差的金融计算中,主要是因为浮点型数值采用二进制系统表示,所以无法精确的表示分数,在这种不要不含误差的情况下建议使用BigDecimal类型。

  阅读源码时发现了个比较有意思的地方:

  isNaN(),这个方法貌似没啥用啊,API说明参数是非数字的时候返回true,可是如果参数是非数字的话会报编译错误。

static public boolean isNaN(double v) {
return (v != v);
}

  三、字符型

  char类型用于表示单子字符,Unicode编码单元可以表示为十六进制,范围是从\u0000~\uffff,Java中的char类型使用16位的Unicode字符集,使用时使用英文单引号引起来,例如'A';

  除非确实需要对UTF-16代码单元进行操作,否则建议不要在程序中使用char类型,因为使用char类型使用的编码机制较为久远,已经不能满足目前程序中的使用了,虽然已经改良了char类型的表现方式,但是在某些情况下会出现特殊问题,已知的在数据库char类型与java中的char类型进行对应的时候,在一些特殊查询中会出现问题。建议使用string来处理字符类型,其实java中的string是基于char型数组实现的。

  四、布尔型

  感觉boolean型没什么好说的啊,就是true和false,就连其封装类都简单的要死,就不说什么了,有哪位道友有疑问可以留言。  

再回首,Java温故知新(二):Java基本数据类型的更多相关文章

  1. Java基础(二) 基本类型数据类型、包装类及自动拆装箱

    我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long ...

  2. [Java面试二]Java基础知识精华部分.

    一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...

  3. java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  4. java基础(二):java内部类

    内部类像寄生虫一样生存在其他类[外部类]的内部.定义在类的内部的类叫内部类,它缩小了可见性.根据内部类定义结构的不同,可以把内部类分为 成员内部类和局部内部类.成员内部类定义的地方和外部类的成员变量和 ...

  5. java基础二 java的跨平台特性

    一:java跨平台的特性: 1.生成不平台无关系的字节码. 2.通过和平台有关的jvm即java虚拟机来执行字节码.jvm不跨平台. 图示: 疑问:1.为什么我们不直接写字节码? 因为字节码只有jvm ...

  6. 重学JAVA基础(二):Java反射

        看一下百度的解释:       JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息     ...

  7. java 多线程二

    java 多线程一 java 多线程二 java 多线程三 java 多线程四 线程中断: /** * Created by root on 17-9-30. */ public class Test ...

  8. 2017-2018-2 20165215 实验二 Java面向对象程序设计

    20165215 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:张家佳 学号:20165215 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...

  9. 再回首,Java温故知新——开篇说明

    不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其 ...

  10. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

随机推荐

  1. Title of live Writer

    Test From Windows Live Writer **markdown bold**

  2. iOS 检测版本更新

    如果我们要检测app版本的更新,那么我们必须获取当前运行app版本的版本信息和appstore 上发布的最新版本的信息. 当前运行版本信息可以通过info.plist文件中的bundle versio ...

  3. WebApp 中用 hashchange 做路由解析

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. My ECMAScript 7 wishlist

    With ECMAScript 6 now feature complete, any further changes to the core of JavaScript will happen in ...

  5. SharePoint2013 Powershell script to get site Title, Site Owner, Site user count and usage

    Powershell script to get site Title, Site Owner, Site user count and usage Add-PSSnapin microsoft.sh ...

  6. 从VC到g++遇到的事

    最近做的项目,需要把代码从VC移植到g++下编译,在这个过程中,遇到了几个平台相关的问题--在VC下顺利编译的代码,但在g++中编译报错. 这里贴出来给大家分享一下: 1. 枚举类型 问题代码 enu ...

  7. 日志式文件系统:SGI的xfs, Reiserfs, IBM的jfs, ext3fs

    日志文件(Log files)是包含系统消息的文件,包括内核.服务.在系统上运行的应用程序等.不同的日志文件记载不同的信息.日志文件系统比传统的文件系统安全,因为它用独立的日志文件跟踪磁盘内容的变化. ...

  8. 构造函数语义学之Copy Constructor构建操作(2)

    二.详述条件 3 和 4 那么好,我又要问大家了,条件1 和 2比较容易理解.因为member object或 base class 含有copy constructor.那么member objec ...

  9. 「Poetize9」升降梯口

    3056: 升降梯口 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 43  Solved: 42[Submit][Status] Description ...

  10. 字符串[未AC](后缀自动机):HEOI 2016 str

    超级恶心,先后用set维护right,再用主席树维护,全部超时,本地测是AC的.放心,BZOJ上还是1S限制,貌似只有常数优化到一定境界的人才能AC吧. 总之我是精神胜利了哦耶QAQ #include ...