Java 是一种强类型语言,因此,Java 定义了基本数据类型。同时, Java 和其它高级计算机语言一样,有多种运算符,这在我们编程过程中极为有用。
运算符
先从运算符谈起。
顾名思义,运算符解决的是多个对象之间的运算问题。 Java 的运算符分为:
- 算术运算符
- 关系运算符
- 逻辑运算符
对于运算符的使用,这里不再赘述,只把恼人的运算优先级再次列出(从上到下优先级递减)。
运算符 | 结合性 |
---|---|
[] . ()(方法调用) | 从左往右 |
! ~ ++ +(一元) -(一元) (强制类型转换) new | 从右往左 |
* / % | 从左往右 |
+ - | 从左往右 |
<< >> >>> | 从左往右 |
< <= > >= instanceof | 从左往右 |
== != | 从左往右 |
& | 从左往右 |
^ | 从左往右 |
| | 从左往右 |
&& | 从左往右 |
|| | 从左往右 |
?: | 从右往左 |
= += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右往左 |
P.S. 结合性指定是:运算符优先级相同的时候,从左边或右边开始运算。
数据类型
这里,我主要想强调的是 Java 的 8 种基本数据类型以及一些常用的类类型。
基本数据类
Java 的基本数据类型同其它高级程序语言比较类似。
有 4 种表示整数的数据类型:
- byte
- short
- int
- long
2 种表示浮点数的数据类型:
- float
- double
1 种表示字符的数据类型:
- char
1 种表示布尔值的数据类型:
- boolean
这些数据类型的使用同样不再赘述。不过,每个基本数据类型都有一个对应的包装类型:
基本数据类型 | 包装数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
包装类型可以进行一个基本数据类型进行封装、获取基本数据类型的最大/最小值以及把字符串转换成一些基本数据类型等一系列操作。在实际开发过程中,比较好用。
常用类类型
除了一些基本数据类型, Java 提供的一些类类型,使用频率也很高。这里把它们拿出来总结一下。
字符串类型
广义上, Java 的字符串就是 Unicode 字符序列(关于 Unicode ,可以参见字符集与字符编码里的说明)。
在 Java 中,字符串是不可变的,即:一个字符串被创建出来后,这一块内存空间里的值是不会被更改。我们对于字符串的常用操作方法有:
- 判断字符串是否相等
str.equals(str1)
- 截取字符串
str.subString(beginIndex, endIndex)
- 拼接字符串
str + str1
- 判断空串
str == ""
- 判断null串
str == null
如果我们想要构造字符串,常用的构造器 (Builder) 有: StringBuffer 和 StringBuilder。它们之间的简单区别是: StringBuilder 是线程安全的, StringBuffer 不是。
我们想要拼接字符串,三者的速度上: StringBuffer > StringBuilder > String。
大数值类型
在 Java 的java.math
包下,有两个类用来表示大数,它们分别是:
- BigInteger
- BigDecimal
这两个类,都可以对超出基本数据类型表示范围的数进行构造。另外,它们的构造方法都需要传进来一个字符串。
对于 BigInteger 而言,可以进行 add, substract, multiply, divide 等操作;对于 BigDecimal,同样可以进行上述操作,不过最好给定一个 MathContext 保留有效数字。
数组类型
准确地讲,数组不是一种类型,而是一种数据结构。但是数组是很多其它 Java 类(如 String、 ArrayList )的基础,所以也拿出来说明。
在 Java 里,数组是一种用来存储相同数据类型对象的数据结构。 对 Java 数组,我们应该知道的是:
- 数组被分配出来后,长度不可变
- 只有有
length
属性,没有length()
方法 - 可使用
for-each
遍历 - 多维数组本质上是数组的数组