再回首,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 ...
随机推荐
- nginx 要改进的地方基础
- eclipse4.2 UI换回 3.6版本的UI
Apparently, the Eclipse developers were kind enough to leave us an easy way out: From the Window men ...
- sdk manager更新失败,显示Download interrupted: read timed out,应该如何解决?
今天开始第一天学习Android,就遇到一个大问题.sdk manager无法自动更新,总在提示超时!!! 经过网上查询发现问题原因是. 在利用android sdk manager更新时失败,具体情 ...
- Web NFC API
W3C Editor's Draft 29 December 2014 This version: http://www.w3.org/2012/nfc/web-api/ Latest publish ...
- ioc开发学习 --简易计时器 (基于iPhone5屏幕尺寸开发)
超简单的秒表:包含:开始.暂停(不清零).清零 方法 核心代码 // // ViewController.m // MiaoBiao // // Created by Ibokan on 15/8/1 ...
- 疯狂java讲义笔记 2.3.7
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- 【HDOJ】2717 Catch That Cow
bfs. /* 2717 */ #include <iostream> #include <cstdio> #include <cstring> #include ...
- A Knight's Journey(dfs)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 25950 Accepted: 8853 Description Back ...
- -_-#【工具】图片导出PDF
- Xcode7真机调试iOS应用程序
金田 近日苹果发布的新的Xcode7带来了许多特性,比如:swift语言比以前运行更快.功能更强.代码具有更高的可读性.Xcode的测试功能可以帮助用户记录应用程序的行为等,还有我们今天要讲到的Xco ...