变量与运算符

关键字

定义: 被Java语言赋予了特殊含义,用做专门用途的字符串 (或单词)。
案例中,出现的关键字有 public 、class 、static 、void等,这些单词已经被Java定义好了
特点:全部关键字都是 小写字母

public class Main {
    public static void main(String[] args) {
        System.out.printf("Hello and welcome!");
    }
}

标识符

– Java中变量、方法、类等要素命名时使用的字符序列,称为标识符.
– 技巧:凡是自己可以起名字的地方都叫标识符。

标识符的命名规则

– 所有的标识符都应该以字母(A-Z 或者 a-z),美元符、或者下划线开始
– 首字符之后可以是字母(A-Z 或者 a-z),美元符、下划线(_)或数字的任何字符组合
– 关键字不能用作标识符
– 标识符是大小写敏感的
合法标识符举例:age、$salary、_value、__1_value
非法标识符举例:123abc、-salary

标识符的命名规范

包名:多单词组成时所有字母都小写: xxxyyyzzz
例如: iava.lang、com.atguigu.bean

类名、接口名: 多单词组成时,所有单词的首宁母大写: XxxYyyZzz
例如: HelloWorld,String,System等

变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写: xxxYyyZzz
例如: age,name,bookName,main,binarySearch,getName

常量名: 所有字母都大写。多单词时每个单词用下划线连接: XXX YYY ZZZ
例如: MAX VALUE,PI,DEFAULT_CAPACITY

变量

变量的概念:

– 内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
– 变量的构成包含三个要素:敬据类型变量名、存储的值。
– Java中变量声明的格式: 数据类型 变量名 = 变量值
– 变量的作用:用于在内存中保存数据。

int s = 6;

使用变量注意:

– Java 中每个变量必须先声明,后使用。
– 使用变量名来访问这块区域的数据。
– 变量的作用域:其定义所在的一对{ }内。
– 变量只有在其作用域内才有效。出了作用域,变量不可以再被调用。
– 同一个作用域内,不能定义重名的变量。

变量的数据类型

– 基本数据类型:包括整数类型(byte、short、int、long)、浮点数类型(float、double)、字符类型(char)、布尔类型(boolean)

– 引用数据类型:包括数组(array)、 类(class)、接口(interface)、枚举(enum)、注解(annotation)、记录(record)

基本数据类型介绍

整数类型:byte、short、int、long

在这里插入图片描述
– 定义 long 类型的变量,赋值时需要以"l"或"L"作为后缀。

long temp = 123456l

浮点类型:float、double

在这里插入图片描述
浮点型常量有两种表示形式:
– 十进制数形式。如:5.12 512.0f .512 (必须有小数点)
– 科学计数法形式。如:5.12e2 512E2 100E-2
float:单精度,尾数可以精确到 7 位有效数字。很多情况下,精度很难满足需求。
double:双精度,精度是 float 的两倍。通常采用此类型。
定义 float 类型的变量,赋值时需要以"f"或"F"作为后缀。

float temp = 12.3f

– 并不是所有的小数都能可以精确的用二进制浮点数表示。二进制浮点数不能精确的表
示 0.1、0.01、0.001 这样 10 的负次幂。
– 浮点类型 float、double 的数据不适合在不容许舍入误差的金融计算领域。如果需要
精确数字计算或保留指定位数的精度,需要使用 BigDecimal 类

//测试 1
System.out.println(0.1 + 0.2);//0.30000000000000004

字符类型:char

– char 型数据用来表示通常意义上“字符”(占 2 字节)
– Java 中的所有字符都使用 Unicode 编码,故一个字符可以存储一个字母,一个汉字,或
其他书面语的一个字符。
– 字符型变量的三种表现形式:

– – 形式 1:使用单引号(’ ')括起来的单个字符。
例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;

– – 形式 2:直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,
XXXX 代表一个十六进制整数。
例如:\u0023 表示 ‘#’。

– – 形式 3:Java 中还允许使用转义字符‘\’来将其后的字符转变为特殊字符
型常量。
例如:char c3 = ‘\n’; // '\n’表示换行符

布尔类型: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 版》

boolean isFlag = true;
 if(isFlag){
 //true 分支
 }else{ 
 //false 分支
 }

基本数据类型变量间运算规则

转换的方式有两种:自动类型提升和强制类型转换。

自动类型提升

规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)
的类型 。
在这里插入图片描述(1)当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给
了存储范围大的变量时

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 类型。否则编译不通过

(2)当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时,
会按照其中最大的类型运算。

int i = 1;
byte b = 1;
double d = 1.0;
double sum = i + b + d;//混合运算,升级为 double

(3)当 byte,short,char 数据类型的变量进行算术运算时,按照 int 类型处理。

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

强制类型转换

规则:将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小)
的类型。
数据类型 1 变量名 = (数据类型 1)被强转数据值; //()中的数据类型必须<=变量值
的数据类型
(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转
换为存储范围小的变量时,可能会损失精度或溢出。

int i = (int)3.14159;//损失精度

double d = 3.6;
int num = (int)d;//损失精度

int i = 250;
byte b = (byte)i;//溢出

基本数据类型与 String 的运算

字符串类型:String
String 不是基本数据类型,属于引用数据类型
使用一对""来表示一个字符串,内部可以包含 0 个、1 个或多个字符。

任意八种基本数据类型的数据与 String 类型只能进行连接“+”运算,且结果
一定也是 String 类型

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);//编译通过

计算机底层如何存储数据

计算机世界中只有二进制,所以计算机中存储和运算的所有数据都要转为二进
制。包括数字、字符、图片、声音、视频等。

class BinaryTest {
public static void main(String[] args) {
int num1 = 123; //十进制
int num2 = 0b101; //二进制
int num3 = 0127; //八进制
int num4 = 0x12aF; //十六进制
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
	}
}

二进制转十进制

在这里插入图片描述

二进制如何表示整数?
计算机数据的存储使用二进制补码形式存储,并且最高位是符号位。
– 正数:最高位是 0
– 负数:最高位是 1
规定
– 正数的补码与反码、原码一样,称为三码合一
– 负数的补码与反码、原码不一样:
负数的原码:把十进制转为二进制,然后最高位设置为 1
负数的反码:在原码的基础上,最高位不变,其余位取反(0 变 1,1 变0)
负数的补码:反码+1

整数:
正数:25 00000000 00000000 000000000 00011001(原码)
正数:25 00000000 00000000 000000000 00011001(反码)
正数:25 00000000 00000000 000000000 00011001(补码)
负数:-25 10000000 00000000 000000000 00011001(原码)
负数:-25 11111111 11111111 111111111 11100110(反码)
负数:-25 11111111 11111111 111111111 11100111(补码)

十进制转二进制

十进制转二进制:除 2 取余的逆
在这里插入图片描述

运算符

算术运算符(7 个)

+、-、*、/、%、++、–
在这里插入图片描述

赋值运算符(12 个)

=、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=

+= 将符号左边的值和右边的值进行相加操作,最后将结
果赋值给左边的变量

-= 将符号左边的值和右边的值进行相减操作,最后将结
果赋值给左边的变量

*= 将符号左边的值和右边的值进行相乘操作,最后将结
果赋值给左边的变量

/= 将符号左边的值和右边的值进行相除操作,最后将结
果赋值给左边的变量

%= 将符号左边的值和右边的值进行取余操作,最后将结
果赋值给左边的变量

比较(或关系)运算符(6 个)

“>、>=、<、<=、==、!=”
在这里插入图片描述
• 比较运算符的结果都是 boolean 型,也就是要么是 true,要么是 false。
• > < >= <= :只适用于基本数据类型(除 boolean 类型之外)
== != :适用于基本数据类型和引用数据类型

逻辑运算符(6 个)

&、|、^、!、&&、||

& 和 &&:表示"且"关系,当符号左右两边布尔值都是 true 时,结果才能
为 true。否则,为 false。

| 和 || :表示"或"关系,当符号两边布尔值有一边为 true 时,结果为
true。当两边都为 false 时,结果为 false

! :表示"非"关系,当变量布尔值为 true 时,结果为 false。当变量布尔值
为 false 时,结果为 true。

^ :当符号左右两边布尔值不同时,结果为 true。当两边布尔值相同时,
结果为 false。

区分“&”和“&&”:

– 相同点:如果符号左边是 true,则二者都执行符号右边的操作
– 不同点:& : 如果符号左边是 false,则继续执行符号右边的操作
&& :如果符号左边是 false,则不再继续执行符号右边的操作
– 建议:开发中,推荐使用 &&

区分“|”和“||”:

— 相同点:如果符号左边是 false,则二者都执行符号右边的操作
— 不同点:| : 如果符号左边是 true,则继续执行符号右边的操作
|| :如果符号左边是 true,则不再继续执行符号右边的操作
建议:开发中,推荐使用 |

位运算符(7 个)

&、|、^、~、<<、>>、>>>
在这里插入图片描述
在这里插入图片描述

条件运算符(1 个)

条件运算符格式:
(条件表达式)? 表达式 1:表达式 2
在这里插入图片描述

说明:条件表达式是 boolean 类型的结果,根据 boolean 的值选择表达式 1 或表达式 2
如果运算后的结果赋给新的变量,要求表达式 1 和表达式 2 为同种或兼容的类型

public static void main(String[] args) {
 int i = (1==2 ? 100 : 200);
 System.out.println(i);//200
 
 boolean marry = false;
System.out.println(marry ? "已婚" : "未婚" );
 
 double d1 = (m1 > m2)? 1 : 2.0;
System.out.println(d1);
 
 int num = 12;
 System.out.println(num > 0? true : "num 非正数");
}

Lambda 运算符(1个)

运算符优先级

运算符有不同的优先级,所谓优先级就是在表达式运算中的运算符顺序。
上一行中的运算符总是优先于下一行的。
优先级 运算符说明 Java 运算符
1 括号 ()、[]、{}
2 正负号 +、-
3 单元运算符 ++、–、~、!
4 乘法、除法、求余 、/、%
5 加法、减法 +、-
6 移位运算符 <<、>>、>>>
7 关系运算符 <、<=、>=、>、instanceof
8 等价运算符 ==、!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 条件与 &&
13 条件或 ||
14 三元运算符 ? :
15 赋值运算符 =、+=、-=、
=、/=、%=
16 位赋值运算符 &=、|=、<<=、>>=、>>>=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值