小黄鸭系列java基础知识 | 基础语法:基本数据类型和数据运算
基本数据类型和数据运算
前言
今天我们还是分享一些java
的基本语法:基本数据类型和基本数据类型的基本运算。不知道现在大家对java
了解如何,按照我的计划,如果看到前面几次分享你都掌握了,那现在你应该可以用IDEA
创建一个Java
项目,对Java
程序的基本结构也有了一些基本的认识,应该能够找出java
程序中的方法、属性这些基本元素。
我知道,其实让一个已经用Java
做了很多项目的小菜鸟(我觉得我还是个小菜鸟😂),以小白的视角来讲解Java
基础,我觉得还是很难的,这里难的不是知识,难的是认知视角,是知识盲区,可能从我的角度来说,很多基础就是很简单,因为我已经掌握了,形成了一种认知习惯,而初学者正式没有这样的认知思维,就会觉得很难,用一句话说就是——难者不会,会者不难,这就好比你给一个没有任何抽象思维的小孩讲数学,他不能理解为什么1 + 1 = 2
,但是请你相信,没有一个小孩子学不会1 + 1 = 2
,也没有一个人学不会java
,我会尽可能以一个初学者的视角,来分享Java
的知识点。
正文
基本数据类型
上周的分享,我们也提到了数据类型,但是并没有展开来讲,今天我们有必要展开详细了解下Java
的常用数据类型,我们先看下基本的数据类型有哪些:
数据类型 | 字节(byte) | 位(bit) | 长度 | 范围 |
---|---|---|---|---|
byte | 1 | 8 | 2^8=258 | (-2^7, +2^7-1) |
char | 2 | 16 | 2^16 | (-2^16, +2^16-1) |
int | 4 | 32 | 2^32 | (-2^32, +2^32-1) |
short | 2 | 16 | 2^16 | (-2^16, +2^16-1) |
long | 8 | 64 | 2^64 | (-2^64, +2^64-1) |
double | 8 | 64 | 2^64 | (-21024,+21024) |
float | 4 | 32 | 2^32 | (-2128,+2128) |
boolean | 单个布尔类型占4个字节,用int常量表示,1表示true,0表示false;如果是布尔类型的数组,则用byte数组表示,即每个布尔值占1个字节 | 4/1 | true/false |
其中,byte
、shrot
,int
,long
属于整数类型;float
,double
属于浮点类型,也就是我们数学上的小数;char
属于字符类型,就是我们日常生活中的各种符号,比如逗号、字母,还有其他的字符;boolean
是布尔类型,也就是我们日常说的true
和false
。这里的布尔类型比较特殊,大家只需要知道它的值只有true
和false
即可。
需要注意的是,float
类型和byte
类型在使用的时候和其他是不一样的,float
要数字后面加上f
,byte
要注意取值范围,否则会报编译错误:
这里补充一些小知识,很多没有计算机基础的小伙伴可能不是特别了解:
-
位(bit)表示二进制的一个存储单元,目前我们所有的计算机都采用的是二进制,位(bit)是最小的存储单位,存储的值要么是
0
要么是1
。了解了这些,上面的长度和范围我们就知道如何计算了,比如byte
类型,因为他总的长度是8
,符号占一位(正/负),所以存储数值的只能是7
位,那么它的范围就是-2^7 ~ +2^7-1
,这里减1
是因为中间还有个0
,其他的以此类推。 -
数据长度转换:
1 字节(byte) = 8 位(bit)
1 KB = 1024 字节(byte)
1 MB = 1024 KB (Kilobyte)
1 GB = 1024 MB (Megabyte)
1 TB = 1024 GB (Gigabyte)
1 PB = 1024 TB (Terabyte)
1 EB = 1024 PB (Petabyte)
1 ZB = 1024 EB (Exabyte)
1 YB (Yottabyte) = 1024 ZB (Zettabyte)
-
float和double
float的构成:1 bit(符号位) 8 bits(指数位) 23 bits(尾数位)
double的构成:1 bit(符号位) 11 bits(指数位) 52 bits(尾数位)
于是,float的指数范围为-127+128,而double的指数范围为-1023+1024,并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
-
操作数据类型为byte、short、int 、char时,两个数都会被转换成int类型,并且结果也是int类型(在进行+,-,*,/,%运算操作时)
基本运算
我想在座的各位小伙伴都学过数学吧(没学过的出门右转),这里我们讲的也就是基本数据类型的数学运算,下面主要讲的是加、减、乘、除,这里我们以int
为例:
开始之前我觉得我先得补充一下定义属性的语法,一般我们在定义一个属性的时候是这样的:
// 类型 属性名
int a;
类型就是我们的基本数据类型,当然也可以是其他类型,这里先不做讨论,你只需要清楚类型是什么就行了
赋值
赋值运算简单来说就是给属性赋予初始值,就像你刚出生你爸妈给你给你起名一样:
// 赋值运算
int a = 0;
// 你爸你妈给你起名字是这样的,不一样的是我们日常生活中没有类型这个概念:
名字 = 张三;
这里赋值运算的运算符就是=
,对于上面的代码,就是把a
的值设置成0
,这时候你在打印a
的时候,就会输出0
:
加
加法运算和我们数学上的运算符号一样都是+
,具体操作是这样的:
int b = 2;
int c = 3;
// 加法运算
int d = b + c;
打印输出:
减
减法和加法类似:
int b = 2;
int c = 3;
// 减法运算
int e = c - b;
输出结果:
乘
乘法的运算符是*
:
int b = 2;
int c = 3;
// 乘法运算
int f = c * b;
输出结果:
除
除法运算符/
:
int a = 6;
int c = 3;
// 除法
int g = a/c;
运算结果:
复杂四则运算
先看下下面的运算:
// 复杂四则运算
int h = a + c - a * 2/c * (a + b);
和我们数学上的四则运算一样,有括号的先算括号里面的,然后是乘除,再是加减
逻辑运算
等于
运算符:==
int a = 1;
int b = 2;
boolean c = (a == b)
上面的运算表示比较a
和b
是否相等,结果是 c = false
;如果a
也是2的话,那结果就是true
不等于
运算符:!=
int a = 1;
int b = 2;
boolean c = (a != b)
上面的运算结果是 c = true
;
大于(大于等于)
运算符:>
、>=
int a = 1;
int b = 2;
boolean c = (a > b)
boolean d = (a >= b)
上面的运算结果是 c = false
; d = false
;
小于(小于等于)
运算符:<
、<=
int a = 1;
int b = 2;
boolean c = (a < b)
boolean d = (a <= b)
上面的运算结果是 c = true
; d = true
;
短路与
运算符:&&
int a = 1;
int b = 1;
boolean c = (a < b)
boolean d = (a <= b)
boolean e = c && d;
这是个逻辑运算符,只有运算符两边都为true
结果才为true
,否则为false
。为啥叫短路与,因为它在实际运算中如果第一个条件为false
,它就不再运算第二个条件了。上面的运算结果e = false
短路或
运算符:||
int a = 1;
int b = 1;
boolean c = (a < b)
boolean d = (a <= b)
boolean e = c || d;
这是个逻辑运算符,只要运算符一边都为true
结果就为true
,只有两边都为false
结果才为fasle
。为啥叫短路或,因为它在实际运算中如果第一个条件为true
,它就不再运算第二个条件了,上面的运算结果e = true
混合赋值运算
+=
int i = 1;
i += 6;
运算完成后,i
的值变为7,上面的+=
的完整写法是这样的:
i = i + 6;
-=
int i = 9;
i -= 6;
与+=
类似,-=
表示 i = i - 6
;上面运算结果i
= 3
*=
int i = 9;
i *= 6;
与+=
类似,*=
表示 i = i * 6
;上面运算结果i
= 54
/=
int i = 9;
i *= 3;
与+=
类似,/=表示
i = i / 3;上面运算结果
i` = 3
其他运算
取余
int a = 9;
int b = 2;
// a对b取余
int c = a % b;
上面的运算结果是:
1
上面的运算表示计算9除以2之后的余数。
自增
int i = 1;
i++;
上面运算完后,i
的值变为2;i++
可以写成 i = i + 1
;
自减
int i = 1;
i--;
上面运算完后,i
的值变为0;i--
可以写成 i = i - 1
;
位运算
1、运算符
所有位运算都是基于二进制进行的
按位与
-
& 按位与,1,1为1,否则为0
按位或
-
| 按位或,有1则为1,0,0为0
按位异或
-
^ 按位异或,相异为1,相同为0;
按位取反
-
~ 按位取反
按位左移
-
<< 按位左移
int c = 2<<3;//2向左移3位
按位右移
-
>> 按位右移
int d = 4>>2;//4向右移2位
2、知识点
- 在实际开发中,如果遇到乘以2(或者2的次方,4,,8, 16……)可以采取向左移1位(2,3,4……);除法的话可以采用向右移的方式,这样操作不仅效率高,而且显得你很专业;
运算优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | () | 从左向右 |
2 | !、+、-、~、++、-- | 从右向左 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | «、»、>>> | 从左向右 |
6 | <、<=、>、>=、instanceof | 从左向右 |
7 | ==、!= | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?: | 从右向左 |
14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |
结语
今天介绍的内容有点多,特别是java
运算部分,运算部分除了位运算部分,其他的一定要掌握,掌握的不好,会影响后面内容的学习。至于数据类型部分,大家要了解数据类型的取值范围,记住上面的注意事项,特别是byte
,其他的暂时不需要过多关注。好了,今天的内容就到这里吧,写了好几个小时了,我也要好好休息下了