Skip to content

Java 中有两种变量类型:基本类型和引用类型。

基本数据类型

Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。

在Java中,一共有8种基本类型(primitive type),其中有4种整型、2种 浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。

数据类型默认值
byte0
short0
int0
long0L
float0.0f
double0.0d
char'u0000'
String (or any object)null
booleanfalse

1.1 整型

整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型:

类型存储需求默认值取值范围
int4字节0- 2,147,483,648~ 2,147,483,648 (正好超过20亿)
short2字节0- 32768(-2^15)~ 32768(-2^15)
long8字节0- 9,223,372,036,854,775,808(-2^63) ~ 9,223,372,036,854,775,808(-2^63)
byte1字节0-128(-2^7) ~ 127(2^7-1)

1.2 浮点型

浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型,_float__double_,其中float类型精度是8位有效数字,double类型精度是17位有效数字。

类型存储需求默认值取值范围
float4字节0.0f10的-38次方到10的38次方
double2字节0.0d10的-308次方到10的308次方

浮点数值不适用于无法接受舍入误差的金融计算中。主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。

java
float f1 = 234.5f // 后面的f只是为了区别double,并不代表任何数字上的意义
double d1 = 123.4

1.3 char类型

char类型用于表示单个字符,是一个单一的 16 位 Unicode 字符,占用两个字节; 注意,char 实际上是一个整数类型:范围是 '\u0000'(即0)到 '\uffff'(即65535),这意味着 char 可以表示不同语言、符号和特殊字符。

java
char c1 = 'A'; //A:65
char c2 = 66; //B:66

System.out.println(c1); // A
System.out.println(c2); // B

如果我们对一个 int 类型进行强制类型转换为 char,会根据 unicode 编码转换为对应的字符:

java
int c3 = 67;
System.out.println((char) (c3)); //C

1.4 boolean 类型

boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。

1.5 数值类型之间的转换

下图给出了数值型之间的合法转换。 在图中有6个实心箭头,表示无信息丢失的转换;有3个虚箭头,表示可能有精度损失的转换。 image.png

在Java中,允许将double类型转换为int类型,但有可能会丢失一些信息。在这种情况下**(窄转换)**,需要通过强制类型转换(cast)实现这个操作。

2、变量

在Java语言中,所有的变量在使用前必须声明。每个变量都有一个类型(type)。在声明变量时,变量的类型位于变量名之前。

声明变量的基本格式如下:

java
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 修饰。
  • 局部变量:类的方法中的变量。
java
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
++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)
--自减: 操作数的值减少1B-- 或 --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 强制类型转换

强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。

java
double x = 9.998
int n = (int)x

除了布尔型外,任何基本数据类型都可以转换成别的基本数据类型。

3.6.2 条件运算符(?:)

3.6.3 instanceof 运算符

java
// 条件运算符也被称为三元运算符。该运算符有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;
  • 数组一旦创建后,大小就不可改变。

数组初始化语法:

java
// 1. 只声明
int[] a; // 推荐声明语法
int a[];

参考:

菜鸟教程 https://www.runoob.com/java 《java核心技术-卷1》