变量与运算符
关键字、保留字与标识符
1. 关键字(keyword)
- 定义:被java语言赋予了特殊含义,用作专门用途的字符串(或单词)。
- 特点:全部的关键字都是小写字母。
- 官方地址:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
- 整理如下:(图片来自于尚硅谷《java从入门到精通(JDK17版)》)
2.保留字
在50个关键字中,其中const和goto是保留字(reserved word)
3.标识符(identifier)
标识符:java中变量、方法、类等要素命名时使用的字符序列。
标识符的命名规则(不符合规则会报错)
- 由26个英文字母大小写、0-9、_ 或 $ 组成
- 数字不可以开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java 中严格区分大小写,长度无限制。
- 标识符不能包含空格。
标识符的命名规范(不符合规范会被鄙视)
- 包名:多单词组成时所有字母都小写
- 类名、接口名:多单词组成时,所有单词的首字母大写
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写
- 常量名:所有字母都大写。多单词时每个单词用下划线连接
变量
变量是程序中不可或缺的组成单位,最基本的存储单元。
1.变量基础
变量的概念:
- 内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
- 变量的构成包含三个要素:数据类型、变量名、存储的值
- Java 中变量声明的格式:数据类型 变量名 = 变量值
变量的作用:
- 用于在内存中保存数据。
使用变量注意:
- Java 中每个变量必须先声明,后使用。
- 使用变量名来访问这块区域的数据。
- 变量的作用域:其定义所在的一对{ }内。
- 变量只有在其作用域内才有效。出了作用域,变量不可以再被调用。
- 同一个作用域内,不能定义重名的变量。
2.java中变量的数据类型
- 基本数据类型 :包括 整数类型、浮点数类型、字符类型、布尔类型。
- 引用数据类型 :包括数组、类、接口、枚举、注解、记录。
3.变量的使用
3.1变量的声明
- 格式:数据类型 变量名;
java
//例如:
//存储一个整数类型的年龄
int age;
//存储一个小数类型的体重
double weight;
//存储一个单字符类型的性别
char gender;
//存储一个布尔类型的婚姻状态
boolean marry;
//存储一个字符串类型的姓名
String name;
//声明多个同类型的变量
int a,b,c; //表示 a,b,c 三个变量都是 int 类型。
/**
* 注意:变量的数据类型可以是基本数据类型,也可以是引用数据类型。
*/
3.2变量的赋值
给变量赋值,就是把“值”存到该变量代表的内存空间中。同时,给变量赋的值类型必须与变量声明的类型一致或兼容。
变量赋值的语法格式:
变量名 = 值;java
// 举例 1:可以使用合适类型的常量值给已经声明的变量赋值
age = 18;
weight = 109;
gender = '女';
// 举例 2:可以使用其他变量或者表达式给变量赋值
int m = 1;
int n = m;
int x = 1;
int y = 2;
int z = 2 * x + y;
变量可以反复赋值
java
//先声明,后初始化
char gender;
gender = '女';
//给变量重新赋值,修改 gender 变量的值
gender = '男';
System.out.println("gender = " + gender);//gender = 男
举例 4:也可以将变量的声明和赋值一并执行
boolean isBeauty = true;
String name = "52Hertz";
4.基本数据类型介绍
4.1 整数型:byte、short、int、long
Java 各整数类型有固定的表数范围和字段长度,不受具体操作系统的影响,以保证 Java 程序的可移植性。
- 定义 long 类型的变量,赋值时需要以"l"或"L"作为后缀。
- Java 程序中变量通常声明为 int 型,除非不足以表示较大的数,才使用 long。
- Java 的整型常量默认为 int 型。
4.2 浮点型:float、double
与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体操作系统的影响。
- float:单精度,尾数可以精确到 7 位有效数字。很多情况下,精度很难满足需求。
- double:双精度,精度是 float 的两倍。通常采用此类型。
- 定义 float 类型的变量,赋值时需要以"f"或"F"作为后缀。
- Java 的浮点型常量默认为 double 型。
- 浮点类型 float、double 的数据不适合在不容许舍入误差的金融计算领域。如果需要精确数字计算或保留指定位数的精度,需要使用 BigDecimal 类。
java
/**
* 给大家提供几个测试案列,大家可以自己猜测运行结果然后自己跑一跑试试
*/
//测试 1:
System.out.println(0.1 + 0.2);//0.30000000000000004
//测试 2:
float ff1 = 123123123f;
float ff2 = ff1 + 1;
System.out.println(ff1);
System.out.println(ff2);
System.out.println(ff1 == ff2);
4.3 字符型:char
- char 型数据用来表示通常意义上“字符”(占 2 字节)
- Java 中的所有字符都使用 Unicode 编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
- 字符型变量的三种表现形式:
- 形式 1:使用单引号(' ')括起来的单个字符。
- 形式 2:直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX 代表一个十六进制整数。
- 形式 3:Java 中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。
转字符 | 说明 | Unicode |
---|---|---|
\n | 换行符 | \u0009 |
\t | 制表符 | \u0022 |
\" | 双引号 | \u0027 |
\' | 单引号 | \u005c |
\\ | 反斜线 | \u0008 |
\b | 退格符 | \u000d |
4.4 布尔类型:boolean
boolean 类型用来判断逻辑条件,一般用于流程控制语句中:
- if 条件控制语句;
- while 循环控制语句;
- for 循环控制语句;
- do-while 循环控制语句;
boolean 类型数据只有两个值:true、false,无其它
- 不可以使用 0 或非 0 的整数替代 false 和 true,这点和 C 语言不同。
- 拓展:Java 虚拟机中没有任何供 boolean 值专用的字节码指令,Java 语言表达所操作的 boolean 值,在编译之后都使用 java 虚拟机中的 int 数据类型来代替:true 用 1 表示,false 用 0 表示。——《java 虚拟机规范 8 版》
基本数据类型变量间运算规则
在 Java 程序中,不同的基本数据类型(只有 7 种,不包含 boolean 类型)变量的值经常需要进行相互转换。
1. 自动类型提升
规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型 。
- 当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时java
int i = 'A';//char 自动升级为 int,其实就是把字符的编码值赋值给 i 变量了 double d = 10;//int 自动升级为 double long num = 1234567; //右边的整数常量值如果在 int 范围呢,编译和运行都可以通过,这里涉及到数据类型转换 //byte bigB = 130;//错误,右边的整数常量值超过 byte 范围 long bigNum = 12345678912L;//右边的整数常量值如果超过 int 范围,必须加 L,显式表示 long 类型。否则编译不通过
- 当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时,会按照其中最大的类型运算。java
int i = 1; byte b = 1; double d = 1.0; double sum = i + b + d;//混合运算,升级为 double
- 当 byte,short,char 数据类型的变量进行算术运算时,按照 int 类型处理。java
byte b1 = 1; byte b2 = 2; byte b3 = b1 + b2;//编译报错,b1 + b2 自动升级为 int char c1 = '0'; char c2 = 'A'; int i = c1 + c2;//至少需要使用 int 类型来接收 System.out.println(c1 + c2);//113
2. 强制类型转换
将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小)的类型。
- 转换格式:数据类型 1 变量名 = (数据类型 1)被强转数据值; //()中的数据类型必<=变量值的数据类型
- 当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转换为存储范围小的变量时,可能会损失精度或溢出。java
int i = (int)3.14;//损失精度 double d = 1.2; int num = (int)d;//损失精度 int i = 200; byte b = (byte)i;//溢出
- 当某个值想要提升数据类型时,也可以使用强制类型转换。这种情况的强制类型转换是没有风险的,通常省略。java
int i = 1; int j = 2; double bigger = (double)(i/j);
- 声明 long 类型变量时,可以出现省略后缀的情况。float 则不同。java
long l1 = 123L; long l2 = 123;//如何理解呢? 此时可以看做是 int 类型的 123 自动类型提升为long 类型 //long l3 = 123123123123; //报错,因为 123123123123 超出了 int 的范围。 long l4 = 123123123123L; //float f1 = 12.3; //报错,因为 12.3 看做是 double,不能自动转换为 float类型 float f2 = 12.3F; float f3 = (float)12.3;
3. 基本数据类型与 String 的运算
3.1 String
- String 不是基本数据类型,属于引用数据类型
- 使用一对""来表示一个字符串,内部可以包含 0 个、1 个或多个字符。
- 声明方式与基本数据类型类似。例如:String str = “52Hertz”;
3.2 运算规则
- 任意八种基本数据类型的数据与 String 类型只能进行连接“+”运算,且结果一定也是 String 类型。java
System.out.println("" + 1 + 2);//12 int num = 10; boolean b1 = true; String s1 = "abc"; String s2 = s1 + num + b1; System.out.println(s2);//abc10true //String s3 = num + b1 + s1;//编译不通过,因为 int 类型不能与 boolean 运算 String s4 = num + (b1 + s1);//编译通过
- String 类型不能通过强制类型()转换,转为其他的类型
运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
运算符按照功能可以分为:算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符、位运算符、条件运算符、Lambda 运算符
分类 运算符 算术运算符(7 个) +、-、*、/、%、++、-- 赋值运算符(12 个) =、+=、-=、*=、/=、%=、>>=、<<=、>>>=、 &=、 比较(或关系)运算符(6个) >、>=、<、<=、==、!= 逻辑运算符(6 个) &、|、!、&&、|| 位运算符(7 个) &、|、~、<<、>>、>>> 条件运算符(1 个) (条件表达式)?结果 1:结果 2 Lambda 运算符 -> 运算符按照操作个数可以分为:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符 (三目运算符)
分类 运算符 一元运算符(单目运算符) 正号(+)、负号(-)、++、--、!、~ 二元运算符(双目运算符) 除了一元和三元运算符剩下的都是二元运算符 三元运算符 (三目运算符) (条件表达式)?结果 1:结果 2
1.算术运算符
2. 赋值运算符
算符 | 符号解释 |
---|---|
= | 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换 原则进行处理。(支持连续赋值) |
+= | 将符号左边的值和右边的值进行相加操作,最后将结 果赋值给左边的变量 |
-= | 将符号左边的值和右边的值进行相减操作,最后将结 果赋值给左边的变量 |
*= | 将符号左边的值和右边的值进行相乘操作,最后将结 果赋值给左边的变量 |
/= | 将符号左边的值和右边的值进行相除操作,最后将结 果赋值给左边的变量 |
%= | 将符号左边的值和右边的值进行取余操作,最后将结 果赋值给左边的变量 |
3.比较运算符
4.条件运算符
- 格式:(条件表达式)?表达式1:表达式2
- 说明:条件表达式是 boolean 类型的结果,根据 boolean 的值选择表达式 1 或表达式 2
运算符优先级
运算符有不同的优先级,所谓优先级就是在表达式运算中的运算符顺序
优先级 | 运算符说明 | Java 运算符 |
---|---|---|
1 | 括号 | ()、[]、{} |
2 | 正负号 | +、- |
3 | 单元运算符 | ++、--、~、! |
4 | 乘法、除法、求余 | *、/、% |
5 | 加法、减法 | +、- |
6 | 移位运算符 | <<、>>、>>> |
7 | 关系运算符 | <、<=、>=、>、instanceof |
8 | 等价运算符 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 条件与 | && |
13 | 条件或 | || |
14 | 三元运算符 | |
15 | 赋值运算符 | =、+=、-=、*=、/=、%= |
17 | 位赋值运算符 | &=、=、<<=、>>=、>>>= |