Java 中有两种变量类型:基本类型和引用类型。
基本数据类型
Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。
在Java中,一共有8种基本类型(primitive type),其中有4种整型、2种 浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | 'u0000' |
String (or any object) | null |
boolean | false |
1.1 整型
整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型:
类型 | 存储需求 | 默认值 | 取值范围 |
---|---|---|---|
int | 4字节 | 0 | - 2,147,483,648~ 2,147,483,648 (正好超过20亿) |
short | 2字节 | 0 | - 32768(-2^15)~ 32768(-2^15) |
long | 8字节 | 0 | - 9,223,372,036,854,775,808(-2^63) ~ 9,223,372,036,854,775,808(-2^63) |
byte | 1字节 | 0 | -128(-2^7) ~ 127(2^7-1) |
1.2 浮点型
浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型,_float_
和_double_
,其中float
类型精度是8位有效数字,double
类型精度是17位有效数字。
类型 | 存储需求 | 默认值 | 取值范围 |
---|---|---|---|
float | 4字节 | 0.0f | 10的-38次方到10的38次方 |
double | 2字节 | 0.0d | 10的-308次方到10的308次方 |
浮点数值不适用于无法接受舍入误差的金融计算中。主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。
float f1 = 234.5f // 后面的f只是为了区别double,并不代表任何数字上的意义
double d1 = 123.4
1.3 char类型
char
类型用于表示单个字符,是一个单一的 16 位 Unicode 字符,占用两个字节; 注意,char 实际上是一个整数类型:范围是 '\u0000'(即0)到 '\uffff'(即65535),这意味着 char 可以表示不同语言、符号和特殊字符。
char c1 = 'A'; //A:65
char c2 = 66; //B:66
System.out.println(c1); // A
System.out.println(c2); // B
如果我们对一个 int 类型进行强制类型转换为 char,会根据 unicode 编码转换为对应的字符:
int c3 = 67;
System.out.println((char) (c3)); //C
1.4 boolean 类型
boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。
1.5 数值类型之间的转换
下图给出了数值型之间的合法转换。 在图中有6个实心箭头,表示无信息丢失的转换;有3个虚箭头,表示可能有精度损失的转换。
在Java中,允许将double类型转换为int类型,但有可能会丢失一些信息。在这种情况下**(窄转换)**,需要通过强制类型转换(cast)实现这个操作。
2、变量
在Java语言中,所有的变量在使用前必须声明。每个变量都有一个类型(type)。在声明变量时,变量的类型位于变量名之前。
声明变量的基本格式如下:
int a, b, c; // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22; // 声明并初始化 z
String s = "runoob"; // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x'; // 声明变量 x 的值是字符 'x'。
Java语言支持的变量类型有:
- 类变量:独立于方法之外的变量,用
static
修饰。 - 实例变量:独立于方法之外的变量,不过没有
static
修饰。 - 局部变量:类的方法中的变量。
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
在Java中,利用关键字final
指示常量。关键字final
表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。
3、运算符
3.1 算数运算符
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。
操作符 | 描述 | 例子 |
---|---|---|
+ | 加法 - 相加运算符两侧的值 | A + B 等于 30 |
- | 减法 - 左操作数减去右操作数 | A – B 等于 -10 |
* | 乘法 - 相乘操作符两侧的值 | A * B等于200 |
/ | 除法 - 左操作数除以右操作数 | B / A等于2 |
% | 取余 - 左操作数除以右操作数的余数 | B%A等于0 |
++ | 自增: 操作数的值增加1 | B++ 或 ++B 等于 21(区别详见下文) |
-- | 自减: 操作数的值减少1 | B-- 或 --B 等于 19(区别详见下文) |
3.2 关系运算符
关系操作符生成的是一个boolean(布尔)结果,它们计算的是操作 数的值之间的关系。
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
关系操作符 == 和 != 在比较对象的时候,是比较的对象的引用,想比较两个对象的实际内容是否相同,需要使用_equals()方法_。
3.3 逻辑运算符
操作符 | 描述 | 例子 |
---|---|---|
&& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B)为假。 |
| | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A | | B)为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A && B)为真。 |
3.4 位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
3.5 赋值运算符
下面是Java语言支持的赋值运算符:
操作符 | 描述 | 例子 |
---|---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C _ = A等价于C = C _ A |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A,C 与 A 同类型时等价于 C = C / A |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A |
<< = | 左移位赋值运算符 | C << = 2等价于C = C << 2 |
>> = | 右移位赋值运算符 | C >> = 2等价于C = C >> 2 |
&= | 按位与赋值运算符 | C&= 2等价于C = C&2 |
^ = | 按位异或赋值操作符 | C ^ = 2等价于C = C ^ 2 |
| = | 按位或赋值操作符 | C | = 2等价于C = C | 2 |
3.6 其他运算符
3.6.1 强制类型转换
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。
double x = 9.998
int n = (int)x
除了布尔型外,任何基本数据类型都可以转换成别的基本数据类型。
3.6.2 条件运算符(?:)
3.6.3 instanceof 运算符
// 条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。
b = (a == 1) ? 20 : 30;
// instanceof 运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
3.7 运算符的优先级
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr-- | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
4、 数组类型
数组只是相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。 Java的数组有几个特点:
- 数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false,对象类型为 null;
- 数组一旦创建后,大小就不可改变。
数组初始化语法:
// 1. 只声明
int[] a; // 推荐声明语法
int a[];
参考:
菜鸟教程 https://www.runoob.com/java 《java核心技术-卷1》