变量和数据类型

这一节中,我们要知道Java的变量分为两种:基本类型的变量和引用类型的变量。并且了解Java中的8种基本类型的变量。

变量

在计算机术语中,变量是指计算机语言中能储存计算结果或能表示值的抽象概念。让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字。

当然,上面的描述非常抽象,我们来通过改编一下HelloWorld来直观的看看变量:

执行上面的代码,可以看到程序依然能输出Hello World!,我们观察这段代码与原来程序的区别,发现主要是靠hello这个新出现的东西把Hello World!传到了println方法中。

这个hello就是变量,变量是可变的,我们可以给它重复赋值:

执行上面的代码,看到程序会有如下输出:

声明变量

在Java中,每一个变量属于一个类型(type)。在声明变量时,变量所属的类型位于变量名之前。我们列举一些声明变量的示例:

可以看到,每个声明都是一条完整的语句,以分号结尾。

变量名必须以字母开头,后接字母和数字的组合。(这里再强调一次以前讲过的内容,注意:在Java中,字母的含义比较广泛,包括'a'~'z'、'A'~'Z'、'_'或某种语言中代表字母的任何Unicode字符。

同样,我们也可以一行声明多个变量:

变量初始化

声明一个变量之后,必须对变量做初始化才可以使用。

以下的例子,在IDEA中可以看到,使用未初始化的变量,IDEA直接报错(红线)了:

img

想要对一个已经声明过的变量进行赋值,就需要将变量名放在等号(=)左边,相应取值的Java表达式放在等号的右边。

也可以像最开始的例子一样,将变量的声明和初始化放在同一行。

需要注意的是,Java中的变量不能重复声明,即下面的方式就会报错:

img

常量

有可以重复赋值的变量,就有不能被重复赋值的常量。

在Java中,利于关键字final来声明常量,关键字final标记在变量前,代表这个变量只能被赋值一次,赋值之后不可改变。习惯上,常量名使用大写!

当我们尝试给常量再次赋值时,IDEA直接报错:

img

一般情况下,我们更习惯把常量通过public static final定义在方法外面来写常量,举例如下:

数据类型

上面在声明变量的时候,我们说过变量必须属于一个类型,这个类型就是数据类型。

在Java中,一共有两种数据类型,分别是:基本类型和引用类型。我们需要知道的是,除了基本类型全部是引用类型。

Java这种每个变量都必须声明一种类型的语言,被称作强类型语言。相应的,一些语言比如php是不需要声明变量类型的,被称作弱类型语言。

基本数据类型

在Java中,一共有8种基本类型,分别是:

  • 整数类型:byte,short,int,long
  • 浮点数类型:float,double
  • 字符类型:char
  • 布尔类型:boolean

我们按照类型分别来讲一下

整型

整型对应的就是数学中整数部分,它允许是负数。为什么要有4种整数类型呢?因为他们存储占用的字节数不同,相应的取值范围也不同:

类型存储字节数取值范围
int4字节-2147483648 ~ 2147483647
short2字节-32768 ~ 32767
long8字节-9223372036854775808 ~ 9223372036854775807
byte1字节-128 ~ 127

需要注意的是,在整型变量赋值的时候,我们非但可以赋值十进制的数,还可以赋值8进制和16进制的数值,在16进制前我们加前缀0x,在8进制前加前缀0,2进制前加前缀0b。当然,8进制的前缀容易混淆,比如010,代表十进制里面的8,但是看着很奇怪,所以我们尽可能不要用8进制。使用long类型的变量赋值的时候,我们会带一个后缀L。

下面是一个各种整数类型的变量声明和赋值的例子:

看下输出:

浮点型

浮点类型的数就是小数,因为小数用科学计数法表示的时候,小数点是可以“浮动”的,如1234.5可以表示成12.345x102,也可以表示成1.2345x103,所以称为浮点数。

浮点类型有两种:

类型存储字节数取值范围
float4字节大约±3.402 823 47E + 38F(有效位数6~7位)
double8字节大约±1.797 693 134 862 315 70E + 308(有效位数为15位)

需要注意的是,float类型的数值后面有一个后缀F(也可以小写f),不加会报错。没有后缀F的浮点数值默认为double类型,double类型可以在数值后面加后缀D(也可以不加)。

下面是一个各种浮点类型的变量声明和赋值的例子:

看下输出:

在上面的例子中,我用了一些大家都能看得懂的数学四则运算,输出了一些有意思的东西。最值得注意的是浮点数的减法,可能和大家想的是有区别的,所以对于要精确计算的时候,浮点数不是一个合适的选择,应该选择BigDecimal类。

char类型

char类型用于表示单个字符。通常用来表示字符常量。

对于我们同学来讲,我们只需要知道char类型需要单引号且只有1个字符就够了。我非常不建议大家使用char类型,因为char类型在Java里是个需要知道一些Unicode底层原理才能用的好的基本类型。平时大家使用字符串类型就好了,因为字符串类型才是大家常规理解的字符串,而char不是!

我这边随便举个例子让大家看看char的使用办法,请大家千万不要这样使用!也不要使用char这个类型,除非你能深刻理解Java中的char类型是用UTF-16描述一个code point,并且确实需要对UTF-16 code unit做操作

输出结果为:

这么写,在IDEA里是会直接报错的,但是依然可以运行,因为这绝对不是正常的写法!

我再次声明一下:不要乱用这个类型,除非你很懂。

boolean类型

Boolean(布尔)类型有两个值:false和true,用来判断逻辑条件。

需要注意的是,整型值和布尔值之间不能进行互相转换。

引用类型

在这一节中,大家只需要知道,除了上述基本类型的变量,剩下的都是引用类型。

因为引用类型的实际实现需要JVM的知识,简单的来说,引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置;但是实际上又要复杂很多,我们在讲面向对象的时候具体来看这个问题。

var关键字

Java10之后呢,引入了var关键字,可以在声明变量的时候代替变量的类型写在变量名的左边。

用法如下:

执行结果如下:

你是否感觉技术要学的内容太多?永无止境?
你是否感觉已经学会很多,但是面试就挂?
非酱油已经启动互联网“零”计划
提供1对1辅导,带你从“零”到入职
中途不经过任何弯路,最短距离拿到高薪offer
到非酱油藏经阁修炼,工资最少涨2000!