如今个人电脑的配置越来越高,内存和硬盘的容量大小都是以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. 设置mysql InnoDB存储引擎下取消自动提交事务

    mysql 存储引擎中最长用的有两种,MyISAM 存储引擎和InnoDB存储引擎. 1.MyISAM 存储引擎 不支持事务,不支持外键,优势是访问速度快: 2.InnoDB存储引擎 支持事务,一般项 ...

  2. Mesos源码分析(12): Mesos-Slave接收到RunTask消息

    在前文Mesos源码分析(8): Mesos-Slave的初始化中,Mesos-Slave接收到RunTaskMessage消息,会调用Slave::runTask.   void Slave::ru ...

  3. [BlueZ] 2、使用bluetoothctl搜索、连接、配对、读写、使能notify蓝牙低功耗设备

    星期三, 05. 九月 2018 02:03上午 - beautifulzzzz 1.前言 上一篇讲了如何编译安装BlueZ-5,本篇主要在于玩BlueZ,用命令行去操作BLE设备: [BlueZ] ...

  4. 常见的java设计模式

    单例模式 简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例. getInstan ...

  5. 【RL-TCPnet网络教程】第20章 RL-TCPnet之BSD Socket客户端

    第20章      RL-TCPnet之BSD Socket客户端 本章节为大家讲解RL-TCPnet的BSD Socket,学习本章节前,务必要优先学习第18章的Socket基础知识.有了这些基础知 ...

  6. 【RL-TCPnet网络教程】第14章 RL-TCPnet之TCP客户端

    第14章      RL-TCPnet之TCP客户端 本章节为大家讲解RL-TCPnet的TCP客户端实现,学习本章节前,务必要优先学习第12章TCP传输控制协议基础知识.有了这些基础知识之后,再搞本 ...

  7. Python前世今生以及种类、安装环境

    一.Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为A ...

  8. [Swift]LeetCode322. 零钱兑换 | Coin Change

    You are given coins of different denominations and a total amount of money amount. Write a function ...

  9. [Swift]LeetCode710. 黑名单中的随机数 | Random Pick with Blacklist

    Given a blacklist B containing unique integers from [0, N), write a function to return a uniform ran ...

  10. ActiveMQ嵌入Tomcat

    在一些项目中,单独开启一个ActiveMQ,对于项目实施来说有时略显繁琐.所以我们将ActiveMQ内嵌到Tomcat,Tomcat启动同时就顺带启动了ActiveMQ.由此我们需要掌握三个个重要的知 ...