再回首,Java温故知新(二):Java基本数据类型
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基本数据类型的更多相关文章
- Java基础(二) 基本类型数据类型、包装类及自动拆装箱
我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long ...
- [Java面试二]Java基础知识精华部分.
一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...
- java基础(二)-----java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- java基础(二):java内部类
内部类像寄生虫一样生存在其他类[外部类]的内部.定义在类的内部的类叫内部类,它缩小了可见性.根据内部类定义结构的不同,可以把内部类分为 成员内部类和局部内部类.成员内部类定义的地方和外部类的成员变量和 ...
- java基础二 java的跨平台特性
一:java跨平台的特性: 1.生成不平台无关系的字节码. 2.通过和平台有关的jvm即java虚拟机来执行字节码.jvm不跨平台. 图示: 疑问:1.为什么我们不直接写字节码? 因为字节码只有jvm ...
- 重学JAVA基础(二):Java反射
看一下百度的解释: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息 ...
- java 多线程二
java 多线程一 java 多线程二 java 多线程三 java 多线程四 线程中断: /** * Created by root on 17-9-30. */ public class Test ...
- 2017-2018-2 20165215 实验二 Java面向对象程序设计
20165215 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:张家佳 学号:20165215 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...
- 再回首,Java温故知新——开篇说明
不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其 ...
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
随机推荐
- lmsw - 加载机器状态字
将源操作数加载到机器状态字,即寄存器 CR0 的位 0 到 15.源操作数可以是 16 位通用寄存器或内存位置.只有源操作数的低 4 位(也就是 PE.MP.EM 及 TS 标志)会加载到 CR0.C ...
- Java 8 与 .Net的平台发展
从早期版本中,我们已经可以领略到一些令人兴奋的特性.但是开发真Andrew C.Oliver表示,尽管如此,Java语言在某些特性上还是落后于.Net.比如,Java 8 中最令人期待的Lambda表 ...
- 在Thinkphp3.2 中使用PHPMailer 发送邮件
phpmailer发送邮件是php开发者首选的一个邮件发送插件了,下面我来介绍怎么集成phpmailer到thinkphp框架了,有需要了解的朋友可参考. phpmailer发送邮件功能很强大,今天真 ...
- .NET序列化的一点技巧
介绍 序列化是将对象状态转换为可保持或传输的形式的过程.序列化的补集是反序列化,后者将流转换为对象.这两个过程一起保证数据易于存储和传输. .NET Framework 提供了两个序列化技术: 二进制 ...
- ASP.NET关于引用bootstrap.css导致Gridview Header无法居中
HorizontalAlign="Center" 属性因不知名原因被覆盖掉. 可以使用<HeaderStyle CssClass="text-center&qu ...
- Node.js教程
Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的服务器端平台.Node.js是由瑞恩·达尔在2009年开发的,它的最新版本是v0.10.36. N ...
- Unity3d webplayer获取url参数
Unity3d webplayer获取url参数 1.Unity中代码,在Start方法中调用了HTML的GetUrl方法!Application.ExternalCall( "SayHel ...
- hdu 5074 Hatsune Miku
http://acm.hdu.edu.cn/showproblem.php?pid=5074 题意:给你一个的矩阵score[i][j],然后给你一个数列,数列中有一些是-1,代表这个数可以换成1~m ...
- SQL SERVER大数据分页
select * from (select rownum r, a.* from (select * from table_name order by ndatetime desc ) a wher ...
- 黄源河《左偏树的应用》——数字序列(Baltic 2004)
这道题哪里都找不到. [问题描述] 给定一个整数序列a1, a2, … , an,求一个不下降序列b1 ≤ b2 ≤ … ≤ bn,使得数列{ai}和{bi}的各项之差的绝对值之和 |a1 - b1| ...