如今个人电脑的配置越来越高,内存和硬盘的容量大小都是以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. dedecms 后台可以上传mp4,但无法选择

    原文链接 找到 /include/dialog/select_media.php 找到rmvb,在其后面加 “|mp4” 即可. 1

  2. js的一些function

    /** * * 根据秒数返回 一个日期范围 * timerFilter(10) */ function timerFilter(n) { let days = 31; // 一月多少天 const o ...

  3. Tomcat问题

    1 Tomcat控制台中文乱码 打开tomcat/conf/logging.properties 找到java.util.logging.ConsoleHandler.encoding = UTF-8 ...

  4. 微信小程序ios点击状态栏返回顶部不好使

    最近做了一款微信小程序,各方面感觉都很完美(萝卜一直这么自信),今天设计总监告诉我你的小程序怎么返回顶部不好使呀,吓得我赶紧拿手机试试,没毛病啊,我手机(苦逼的安卓机)上点两下就回去了呀,遂去找他理论 ...

  5. [转] Quality Of Service In OpenStack

    http://tropicaldevel.wordpress.com/2013/07/15/quality-of-service-in-openstack/ In this post I will b ...

  6. [Swift]LeetCode325. 最大子数组之和为k $ Maximum Size Subarray Sum Equals k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  7. 【阿里面试系列】Java线程的应用及挑战

    文章简介 上一篇文章[「阿里面试系列」搞懂并发编程,轻松应对80%的面试场景]我们了解了进程和线程的发展历史.线程的生命周期.线程的优势和使用场景,这一篇,我们从Java层面更进一步了解线程的使用.关 ...

  8. github pages绑定域名

    网上很多人问 github 绑定域名要不要备案,很多人的回答是: 国内主机需要备案,国外主机不用 这个说法是没错的,但是却没有直接回答出 github pages 是否需要备案! 首先声明 githu ...

  9. python 菱形继承问题究极版

    如果只是正常的菱形继承,经典类(python2中最后一个父类不继承object类)是深度优先,即会从左边父类开始一路走到底 新式类(最后一个父类继承了object类)是广度优先,即从左边父类开始继承, ...

  10. navicat for mysql 链接时报错:1251-Client does not support authentication protocol requested by serve

    navicat for mysql 链接时报错:1251-Client does not support authentication protocol requested by serve 解决方法 ...