一文详解 Java 的八大基本类型
自从Java发布以来,基本数据类型就是Java语言中重要的一部分,本文就来详细介绍下每种基本类型的具体使用方法和限制。
作者 | Jeremy Grifski
译者 | 弯月,责编 | 郭芮
出品 | CSDN(ID:CSDNnews)
以下为译文:
几年前,我开始编写了一系列有关Java入门的文章,我觉得有必要将其中一些非常细节的内容单独拿出来写成文章。这样,那些入门内容就更容易理解了。首先,我来介绍一下有关Java 8中的基本类型。
如题所述,Java语言本身有8种基本类型。在下面几节中,就让我们一起来看看这8种基本类型。我将针对每种基本类型,介绍具体的使用方法和限制。
int基本类型
首先,Java的整数是32位有符号(即包括正值和负值)整数,由int关键字表示:
int someNumber = 10;
当然,像所有基本类型一样,整型有自己的限制。由于它只有32位,所以其取值范围为-2147483648到2147483647。这数字很大嘛!当然,我们可以在DrJava的交互面板中用下述技巧来确认:
Integer.MAX_VALUE // Prints 2,147,483,647
Integer.MIN_VALUE // Prints -2,147,483,648
自然地,对于简单的计算而言,int是最常用的整数类型。如果你需要更大的数字范围,请参照下面的long。
double基本类型
与int不同,Java的双精度类型是64位浮点数,由double关键字表示:
double someNumber = 110.55;
需要提醒的是,浮点数实际上就是实数。换句话说,双精度浮点数中包含小数点。
由于双精度类型是64位,它能表示的数字要比整型多很多。同样,我们可以利用交互面板来确认双精度类型的范围:
Double.MAX_VALUE // Prints 1.7976931348623157E308
Double.MIN_VALUE // Prints 4.9E-324
需要注意的是,负的指数表示的是非常小的数字,而不是非常大的负数。所以这里的取值范围跟整数不是完全一样。
一般而言,double是在Java中使用浮点数的默认选择。另一个选择是float。
char基本类型
我们已经看到,Java的字符类型表示16位字符,由char关键字表示:
char someCharacter = 'f';
Java中所有的字符都用单引号表示。同时,双引号用来表示字符串。我们稍后会讨论字符串。
与往常一样,我们可以通过下面的代码找出字符的范围:
Character.MAX_VALUE // Prints '???'
Character.MIN_VALUE // Prints ''
为了让这个范围有意义,我们可以将结果转换成整数(稍后会更多地介绍):
(int) Character.MAX_VALUE // Prints 65535
(int) Character.MIN_VALUE // Prints 0
可见,char类型是Java中唯一的无符号类型。换句话说,字符的取值范围为0到65535,每个值映射到特定的字符。如果需要创建该范围之外的字符,可以将一对字符组合起来。参见“在Java中反转字符串”(https://therenegadecoder.com/code/reverse-a-string-in-java/)这篇文章中的例子。
byte基本类型
当我们讨论二进制时,我们讨论的实际上是比特的概念。而8个比特组成一个字节,字节是Java支持的基本类型之一。本质上,byte类型只不过是取值范围为-128到127的8位整数。可以猜到,字节由byte关键字表示:
byte someByte = 20;
同样,可以利用下面的代码片段来确认byte类型的取值范围:
Byte.MAX_VALUE // Prints 127
Byte.MIN_VALUE // Prints -128
根据我的经验,byte类型在读取和处理原始数据时非常有用。但是一般而言,我们不会使用它,因为取值范围太小了。
short基本类型
short是另一种整数类型,但它占用的空间要比int类型更小。实际上,它的占用空间正好是int类型的一半,为16位,由short关键字表示:
short someNumber = 11;
short类型的取值范围也只有整数的一半,我们可以用下述代码确认:
Short.MAX_VALUE // Prints 32767
Short.MIN_VALUE // Prints -32768
在实际应用中,short只有65546个可能的值。在内存空间和磁盘空间受限的情况下,我们会使用byte和short。但在其他情况下,在定义整数时默认使用int更为安全。
long基本类型
与short相反的是long基本类型,即长整数。该类型用来表示比int类型还要大的非常大的数。long类型是64位有符号整数,其取值范围超过了10的18次方。
通常,长整数用long关键字表示:
long someBigNumber = 1013401346173L;
下面的代码可以查看64位值究竟有多大:
Long.MAX_VALUE // Prints 9,223,372,036,854,775,807
Long.MIN_VALUE // Prints -9,223,372,036,854,775,808
也许,long可以用来计算光在一定时间内走过的距离。光在一秒内大约传播30万千米。如果编写一个程序来跟踪光走过的距离,那么7秒后int类型就超出范围类,而long类型能够计算大约975年。不相信吗?可以看看这个gist(https://gist.github.com/jrg94/820d3f0f482dd19f0170964346381df0)中的计算。
float基本类型
虽然我们通常使用64位浮点数类型double,但Java还支持另一种浮点数类型,叫做float。但与int类似,Java默认情况下使用double表示浮点数。不管怎样,我们可以用float来表示32位浮点数类型:
float someNumber = 11.4f;
float类型的范围如下:
Float.MAX_VALUE // Prints 3.4028235E38
Float.MIN_VALUE // Prints 1.4E-45
可见,32位浮点数的范围和精度都要小得多。如果不需要double的精度,同时节省一半的空间,那么可以选择float类型。
boolean基本类型
最后我们来讨论一下boolean类型。定义布尔类型可以使用boolean关键字:
boolean isBool = true;
布尔类型有些特殊,不像其他基本类型那样,它们表示的不是数字值。实际上,之前使用的MAX_VALUE和MIN_VALUE技巧在这里不能使用。相反,它表示的是true或false,即真和假。
在此,我不打算详细介绍布尔类型,因为在Java中做任何事情都会涉及到布尔类型。尽管如此,我们通常不会明确地声明布尔类型。相反,许多代码逻辑中的比较操作的结果都是布尔类型。
推荐:射阳县属于哪个市?
一文详解 Java 的八大基本类型的更多相关文章
- 详解Java 8中Stream类型的“懒”加载
在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...
- 详解java中的byte类型
Java也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte.下面这篇文章主要给大家介绍了关于j ...
- 「跬步千里」详解 Java 内存模型与原子性、可见性、有序性
文题 "跬步千里" 主要是为了凸显这篇文章的基础性与重要性(狗头),并发编程这块的知识也确实主要围绕着 JMM 和三大性质来展开. 全文脉络如下: 1)为什么要学习并发编程? 2) ...
- 详解Java GC的工作原理+Minor GC、FullGC
详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- 详解Java中的clone方法
详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...
- java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的
本文将详解java中的异常和异常处理机制 异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常. Java异常的分类和类结构图 1.Java中的所 ...
- 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)
在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...
- 第三节:带你详解Java的操作符,控制流程以及数组
前言 大家好,给大家带来带你详解Java的操作符,控制流程以及数组的概述,希望你们喜欢 操作符 算数操作符 一般的 +,-,*,/,还有两个自增 自减 ,以及一个取模 % 操作符. 这里的操作算法,一 ...
随机推荐
- wireshark封包详细信息详解(10.15 第二十一天)
wireshark:网络流量抓取分析神器,需要学习一些常用的数据包过滤规则 IP过滤 ip.addr==192.168.1.1 只要包中的IP有192.168.1.1的,就会提取过来 IP源地址:ip ...
- Ubuntu18安装LAMP环境详细步骤
Ubuntu18安装Lamp环境 1.su root 切换root账号(root账户权限高不用总输入sudo) 更新源 阿里源网址:https://opsx.alibaba.com/mirror 更 ...
- C语言数组的所有元素初始化成相同的值
这个问题一直困扰了我很久,我向来都用for来控制置-1:因为我不会用memset(つ﹏⊂)我是个蒟蒻.今天终于学会了一点皮毛,赶紧记录一下 方法一: 简单粗暴,快捷有效.for循环一点点的置1,这个方 ...
- CCCC L2-004. 这是二叉搜索树吗?
题意: 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树都是二叉搜索树. 所谓 ...
- 读书笔记 - js高级程序设计 - 第十一章 DOM扩展
对DOM的两个主要的扩展 Selectors API HTML5 Element Traversal 元素遍历规范 querySelector var body = document.query ...
- Atom 插件推荐
(1)atom-ternjs : js(e6)的自动补充 (2)key-binding-mode : atom 快捷键管理 (3)pre-view : pdf预览 (4)activate-power- ...
- MyBatis的初始化过程。
对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...
- ROS常见问题(二) 运行文件时报错environment variable ' ###_MODEL' is not set
作者在配置pibot机器人时报错: Invalid <arg> tag: environment variable 'PIBOT_MODEL' is not set. Arg xml is ...
- 刷题48. Rotate Image
一.题目说明 题目是48. Rotate Image,简而言之就是矩阵顺时针旋转90度.不允许使用额外的矩阵. 经过观察(写一个矩阵,多看几遍就知道了),旋转90度后: 第1行变为len-1列(最后一 ...
- 创建Oracle序列sequence
create sequence SEQ_ID minvalue 1 maxvalue 99999999 start with 1 increment by 1 nocache order; 建解发器代 ...