小黄鸭系列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,其他的暂时不需要过多关注。好了,今天的内容就到这里吧,写了好几个小时了,我也要好好休息下了

浙公网安备 33010602011771号