如今个人电脑的配置越来越高,内存和硬盘的容量大小都是以G为单位,而1G=1024M=1024*1024K=1024*1024*1024字节。不过在PC的早期发展阶段,电脑的存储空间却是十分有限的,像2000年前后广泛使用的3.5寸软盘,其存储容量只有区区1.44M,当时流行的SDR内存容量也才32M和64M。所以早期的编程语言很注重节约存储,给每个变量分配内存都要精打细算,大环境如此,于是早在1996年诞生的Java语言也不例外,仅仅是处理整数和小数,就分成了byte、short、int、long、float、double六种数字类型。下面简要介绍一下这六种类型的数值表示范围。
1、byte:字节型。该类型的变量只占用一个字节大小,一个字节可表达八位的二进制数,因为八位的第一位是符号位,为0时表示当前是正数,为1时表示当前是负数,所以byte类型实际囊括的数值范围是-128到127。其中00000000到01111111表示了0到127区间,而10000000到11111111表示了-128到-1区间。需要注意的是,Java使用补码表示二进制数,且正数的补码与其原码相同,但负数的补码是在其反码的末位加1(负数的反码是正数)。因此假设某负数为x,若令“x取反+1=10000000”,则求得“x=(10000000-1)再取反=01111111取反=10000000”,即x=-128;若令“x取反+1=11111111”,则求得“x=(11111111-1)再取反=11111110取反=00000001”,即x=-1。
2、short:短整型。该类型的变量占用两个字节大小,可表达的数值范围是-32768到32767,即负2的15次方~2的15次方-1。
3、int:整型。该类型的变量占用四个字节大小,可表达的数值范围是-2147483648到2147483647,即负2的31次方~2的31次方-1。
4、long:长整型。该类型的变量占用八个字节大小,可表达的数值范围是-9223372036854775807到9223372036854775808,即负2的63次方~2的63次方-1。
5、float:浮点型,用来表示小数。该类型的变量占用四个字节大小,它包括一个符号位、一个8位的指数和一个23位尾数,此时1+8+23=32位=4字节。浮点数的计算公式为:正/负*(2的指数次方)*尾数,其中正/负由符号位决定,8位指数的表示范围是-128到127,尾数表示一个介于1.0和2.0之间的小数。这样float类型可表示的整数部分范围横跨正负3.402823乘以10的38次方,小数部分范围低至1.401298乘以10的负45次方,虽然看起来浮点数的表示位数大大增加,但是有效数字只有6到7位,也就是说,开头6到7位才是精确的数字,后面的数字统统不准。
6、double:双精度型,用来表示小数。该类型的变量占用八个字节大小,它包括一个符号位、一个11位的指数和一个52位尾数,此时1+11+52=64位=8字节。double类型可表示的整数部分范围横跨正负1.797693乘以10的308次方,小数部分范围低至4.9000000乘以10的负324次方,并且有效数字提高到了15到16位。跟double双精度相比,float类型的有效位数明显不够,于是浮点数也被称作单精度数。

对于实际开发来说,byte和short类型可表达的整数范围太小,同时现在电脑的存储容量毫不在乎几个字节的差异,因此这两个类型在Java编程中基本无用武之地。int类型可以表示高达21亿的整数,能够应付大部分的整数运算场景,故而Java编码中的整数变量最常使用int类型。至于long类型可表示多达19位的十进制数,常用于int类型覆盖不到的整数场合,比如世界人口数量80亿必须通过long类型来存储。小数计算方面,因为float类型的数字精度不够准,所以小数变量更常使用double类型来处理。
有了这些基本的数值类型,就能声明相应类型的变量了,声明语句的格式为“变量类型 变量名称;”。如果在声明变量之时就进行初始赋值,则声明语句的格式为“变量类型 变量名称 = 具体的数值;”。下面是个声明数值变量的代码例子,其中包含了先声明再赋值、以及声明时即刻赋值的两种情况:

public class Basic {

	public static void main(String[] args) {
int zhumulanma; // 先声明变量
// 8844是2005年中国测量得到的珠穆朗玛峰岩面高度,8848是冰雪高度
zhumulanma = 8844; // 再对变量赋值
System.out.println("珠穆朗玛峰的高度="+zhumulanma);
double yuanzhoulv = 3.1415926; // 在声明变量之时就进行初始赋值
System.out.println("圆周率="+yuanzhoulv);
}
}

上述代码的运行结果如下图所示。

Java开发笔记(五)数值变量的类型的更多相关文章

  1. Java开发笔记(二十七)数值包装类型

    方法的出现缘起优化代码结构,但它的意义并不局限于此,正因为有了方法定义,编程语言才更像一门能解决实际问题的工具,而不仅仅是只能用于加减乘除的计算器.在数学的发展过程中,为了表示四则运算,人们创造了加减 ...

  2. Java开发笔记(五十六)利用枚举类型实现高级常量

    前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...

  3. Java开发笔记(五十二)对象的类型检查

    前面介绍了类的多态性,来自于鸡类的实例chicken,既能用来表达公鸡实例,也能用来表达母鸡实例.可是这导致了一个问题,假如在call方法内部需要手工判断输入参数属于公鸡实例还是母鸡实例,那该如何是好 ...

  4. Java开发笔记(二十八)布尔包装类型

    前面介绍了数值包装类型,因为不管是整数还是小数,它们的运算操作都是类似的,所以只要学会了Integer的用法,其它数值包装类型即可一并掌握.但是对于布尔类型boolean来说,该类型定义的是“true ...

  5. Java开发笔记(三十一)字符类型的表达

    前面介绍的Java编程,要么是与数字有关的计算,要么是与逻辑有关的推理,充其量只能实现计算器和状态机.若想让Java运用于更广阔的业务领域,就得使其支撑更加血肉丰满的业务场景,而丰满的前提是能够表达大 ...

  6. Java开发笔记(三十五)字符串格式化

    前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部 ...

  7. Java开发笔记(五十五)关键字static的用法

    前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类.从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行.其实static ...

  8. Java开发笔记(六十五)集合:HashSet和TreeSet

    对于相同类型的一组数据,虽然Java已经提供了数组加以表达,但是数组的结构实在太简单了,第一它无法直接添加新元素,第二它只能按照线性排列,故而数组用于基本的操作倒还凑合,若要用于复杂的处理就无法胜任了 ...

  9. Java开发笔记(二十五)方法的输入参数

    前面通过main方法介绍了方法的定义形式,对于方法的输入参数来说,还有几个值得注意的地方,接下来分别对输入参数的几种用法进行阐述.一个方法可以有输入参数,也可以没有输入参数,倘若无需输入参数,则方法定 ...

  10. Java开发笔记(三十三)字符包装类型

    正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...

随机推荐

  1. Linux一键安装宝塔控制面板

    Linux一键安装宝塔的命令行 yum install -y wget && wget -O install.sh http://download.bt.cn/install/inst ...

  2. phpstorm 断点调试 傻瓜教程

    前言: 简单介绍下为什么要用断点调试,很多人说我在代码调试的部位用var_dump 或者 exit 或者print_r来进行断点,但是当项目足够大的时候这样的做法就比较费时费力,因为你断点后需要删除原 ...

  3. SSIS - 5.优先约束

      一.优先约束和执行逻辑 任务和容器是SSIS中的可执行文件,一个优先约束连接着两个可执行文件:优先的可执行文件和约束的可执行文件,如下图. 它的执行逻辑如下图: 1)先执行优先可执行文件 2)判断 ...

  4. 小程序组件化框架 WePY 在性能调优上做出的探究

    作者:龚澄 导语 性能调优是一个亘古不变的话题,无论是在传统H5上还是小程序中.因为实现机制不同,可能导致传统H5中的某些优化方式在小程序上并不适用.因此必须另开辟蹊径找出适合小程序的调估方式. 本文 ...

  5. HTTPS 原理浅析及其在 Android 中的使用

    作者:曹丰斌   本文首先分析HTTP协议在安全性上的不足,进而阐述HTTPS实现安全通信的关键技术点和原理.然后通过抓包分析HTTPS协议的握手以及通信过程.最后总结一下自己在开发过程中遇到的HTT ...

  6. Java提高篇(一):区分引用变量与对象

    我们有代码: New A=new New(); 下面是这个New的类: class New { public New() { System.out.println("这是New类当中的构造方 ...

  7. MQTT在react-native中的运行

    mqtt 1.什么是mqtt? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式 ...

  8. 【RL-TCPnet网络教程】第17章 RL-TCPnet之UDP通信

    第17章      RL-TCPnet之UDP通信 本章节为大家讲解RL-TCPnet的UDP通信实现,学习本章节前,务必要优先学习第16章UDP用户数据报协议基础知识.有了这些基础知识之后,再搞本章 ...

  9. emWin监护仪界面设计,含uCOS-III和FreeRTOS两个版本

    第5期:监护仪界面设计 配套例子:V6-908_STemWin提高篇实验_监护仪界面设计(uCOS-III)V6-909_STemWin提高篇实验_监护仪界面设计(FreeRTOS) 例程下载地址:h ...

  10. APP测试流程的总结

    本规范基于app大小版本测试经验总结. 第一阶段:需求分析(技术+产品) 1. 新需求是否合理 2. 新旧需求时否存在冲突 3. 理出测试重点 4. 估算测试时间 5. 不熟悉的需求点,确认(负责人, ...