JAVA中数据类型(变量和运算符)

数据类型

JAVA中数据类型(变量和运算符)

什么是变量

变量指的是程序运行时可变的量. 相当于开辟一块内存空间来保存一些数据。

变量

1、整数类型

1.1 字节型变量

byte 变量名 = 初始值;

JAVA中数据类型(变量和运算符)
1. 字节类型表示的也是整数. 只占一个字节, 表示范围较小 ( -128 -> +127)
2. 字节类型和字符类型互不相干。

1.2 短整型变量

short 变量名 = 初始值;

JAVA中数据类型(变量和运算符)
short 占用 2 个字节, 表示的数据范围是 -32768 -> +32767。

1.3 整型变量

int 变量名 = 初始值 ;

JAVA中数据类型(变量和运算符)
**在 Java 中, 一个 int 变量占 4 个字节. 和操作系统没有直接关系。
4 个字节表示的数据范围是 -2^31 -> 2^31-1, 也就大概是 -21亿 到 +21亿。

1.4 长整型

long 变量名 = 初始值;

JAVA中数据类型(变量和运算符)
1. 基本语法格式和创建 int 变量基本一致, 只是把类型修改成 long
2. 初始化设定的值为 10L, 表示一个长整型的数字
3. Java 中 long 类型占 8 个字节. 表示的数据范围 -2^63 -> 2^63-1

2、浮点数类型

2.1 单精度浮点型变量

float 变量名 = 初始值;

JAVA中数据类型(变量和运算符)
float 类型在 Java 中占四个字节,一般在工程上用到浮点数都 优先考虑 double, 不太推荐使用 float.

2.2 双精度浮点型变量

double 变量名 = 初始值;

JAVA中数据类型(变量和运算符)
在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分). 如果想得到 0.5, 需要使用 double 类型计算.
JAVA中数据类型(变量和运算符)JAVA中数据类型(变量和运算符)
Java 中的 double 也是 8 个字节, 但是浮点数的内存布局和整数差别很大, 不能单纯的用 2 ^ n 的形式表示数据范围.
Java 的 double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差.

3、字符类型变量

char 变量名 = 初始值;

JAVA中数据类型(变量和运算符)
1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值.
2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一 个字符占用两个字节, 表示的字符种类更多, 包括中文.

3. 使用一个字符表示一个汉字的时候,执行javac出现错误要加上 -encoding utf-8
JAVA中数据类型(变量和运算符)

4、布尔类型变量

boolean 变量名 = 初始值;

JAVA中数据类型(变量和运算符)
1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.
2. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
3. boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定.

5、字符串类型

String 变量名 = “初始值”;

JAVA中数据类型(变量和运算符)
1. Java 使用 双引号 + 若干字符 的方式表示字符串字面值.
4. 和上面的类型不同, String 不是基本类型, 而是引用类型(后面重点解释).
5. 字符串中的一些特定的不太方便直接表示的字符需要进行转义.

运算符

1、 算术运算符

基本四则运算符: + - * / %

a) int / int 结果还是 int, 需要使用 double 来计算.
JAVA中数据类型(变量和运算符)
b) 0 不能作为除数
JAVA中数据类型(变量和运算符)
c) % 表示取余, 不仅仅可以对 int 求模, 也能对 double 来求模

增量赋值运算符 += -= *= /= %=

JAVA中数据类型(变量和运算符)

自增/自减运算符: ++ –

JAVA中数据类型(变量和运算符)

1. 如果不取自增运算的表达式的返回值, 则前置自增和后置自增没有区别.
2. 如果取表达式的返回值, 则前置自增的返回值是自增之后的值, 后置自增的返回值是自增之前的值.

2、关系运算符

关系运算符主要有六个:
== != < > <= >=

JAVA中数据类型(变量和运算符)

关系运算符的表达式返回值都是 boolean 类型.

3、逻辑运算符

逻辑运算符主要有三个:
&& || !

逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean .

逻辑或 ||

规则: 两个操作数都为 false, 结果为 false, 否则结果为 true

逻辑非 !

操作数为 true, 结果为 false; 操作数为 false, 结果为 true(这是个单目运算符, 只有一个操作数).

短路求值

&& 和 || 遵守短路求值的规则.
JAVA中数据类型(变量和运算符)
1. 对于 && , 如果左侧表达式值为 false, 则表达式的整体的值一定是 false, 无需计算右侧表达式.
2. 对于 ||, 如果左侧表达式值为 true, 则表达式的整体的值一定是 true, 无需计算右侧表达式.

& 和 | (不推荐使用)

& 和 | 如果操作数为 boolean 的时候, 也表示逻辑运算. 但是和 && 以及 || 相比, 它们不支持短路求值
JAVA中数据类型(变量和运算符)

4、位运算符

Java 中对数据的操作的最小单位不是字节, 而是二进制位.

位运算符主要有四个:

& | ~ ^

位操作表示按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算.

按位与 & :

如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.

7 的二进制为:00000111
-5的二进制为:10000101
-5的补码为: 11111010 + 1 11111011
00000111&11111011:
00000111
11111011
00000011——>对应十进制的3

按位或 | :

如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

2的二进制位: 0000 0010 -6的二进制位:1000 0110
-6的补码: 1111 1010
运算结果:1111 1010
计算原码:1000 0110
相当于十进制位的:-6

当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算.

按位取反 ~ :

如果该位为 0 则转为 1, 如果该位为 1 则转为 0
-6的二进制位:1000 0110
-6的补码: 1111 1010
计算结果: 0000 0101
相当于十进制:5
注意:按位非是单目运算符。

1. 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二进制位.
2. 0xf 表示 10 进制的 15, 也就是二进制的 1111
3. printf 能够格式化输出内容, %x 表示按照十六进制输出.
4. \n 表示换行符

按位异或 ^ :

如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.

2的二进制位: 0000 0010
-6的二进制位:1000 0110
-6的补码: 1111 1010
计算结果: 1111 1000
原码: 1000 1000
相当于十进制位:-8;

5、位运算符

移位运算符有三个:

<< >> >>>

都是按照二进制位来运算.

左移 << :

最左侧位不要了, 最右侧补 0.

右移 >> :

最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

无符号右移 >>> :

最右侧位不要了, 最左侧补 0.

1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义.

6、条件运算符

条件运算符只有一个:

表达式1 ? 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.
JAVA中数据类型(变量和运算符)

总结:

1. % 操作再 Java 中也能针对 double 来计算.
2. 需要区分清楚 前置自增 和 后置自增之间的区别.
3. 由于 Java 是强类型语言, 因此对于类型检查较严格, 因此像 && 之类的运算操作数必须是 boolean.
4. 要区分清楚 & 和 | 什么时候是表示按位运算, 什么时候表示逻辑运算.整体来看, Java 的运算符的基本规则和 C 语言基本一致.