【01 Java 语言基础:4&5&6(常量&变量及数据类型&运算符)】

4. 常量(constant)

常量:是指在Java程序中固定不变的数据。

分类

类型含义数据举例
整数常量整数正负整数
小数常量小数正负小数
字符常量单引号引起来,只有一个字符,不允许为空‘字’、‘a’、‘1’
字符串常量双引号引起来,可以有多个字符,可以为空“字符串”、“123"、“abc”、""
空常量只有一个值true、false
布尔常量只有两个值null(不可直接打印输出)

5. 变量和数据类型(variable)

5.1 数据类型

5.1.1 分类

基本数据类型:整型、浮点型,字符、布尔型

引用数据类型:字符串、数组、接口、枚举、标注

1)基本数据类型:

整型、浮点型,字符、布尔型
在这里插入图片描述

Java中默认的类型:整型类型是int,浮点型是 double

2)字符型

单个字节可以表示的整数范围是:-128~127

float默认是7位有效数字

double默认是15位有效数字

AscII编码表:将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表 ASCII(
American Standard Code for Information Interchange 美国标准信息交换码)。

字符数值
048
957
A65
Z90
a97
z122

在这里插入图片描述

Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。

(Unicode是世界通用的定长字符集,所有的字符都是16位)

3)转义字符

\"--------"

\'--------'

\\--------\

\t--------制表符(tab)

\n--------换行

5.1.2 数据类型的转换
1)自动转换类型(隐式)

特点:代码不需要进行特殊处理,自动完成。
规则:数据范围从小到大(byte<short<char<int<long<float<double

//左边是long类型,左边默认是int整型,左右不一样
//表示把int常量100赋值给long变量进行存储
//发生了自动类型转换
long num=100;
//同理,符合从小到大的规则,进行了自动类型转换
double num1=1.55F;
/*
byte<short<char<int<long<float<double
*/
float num2=1.52L;
2)强制转换类型(显式)

特点:代码需要进行特殊的格式处理,不能自动完成。

格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;

格式

格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
//会产生编译失败的情况
//左边是int整型变量,右边浮点型默认是double类型
//右边double类型取值范围比int整型大,所以无法进行自动类型转换
int i=1.5;
//强制类型转换
int i=(int) 1.5;

//左边是int类型,右边是long类型
//把long类型赋值到int		byte<short<char<int<long<float<double		
//由大到小,不能发生自动数据类型转换
int num=(int) 100L;

int num=(int)3.99;	//所有小数位都会被舍弃,输出3

注意事项

  1. 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出
  2. byte/short/char这三种类型都可以发生数学运算,例如加法“+”.
  3. byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
  4. boolean类型不能发生数据类型转换
byte<short<char<int<long<float<double
  1. 浮点类型数据计算可能出现误差,若想要想要实现精确运算则借助java.math.BigDecimal类型
System.out.printf(0.1+0.2);		//0.3000 0000 0000 0000 4 

5.2 变量

5.2.1 概念

变量:程序运行期间,内容可以发生改变的量。

5.2.2 格式:

数据类型 变量名称=数据值

//先声明一个变量,再赋值
int num1;
num1=5;
//或者一步到位
int num2=10;
5.2.3 注意事项:
  1. 如果创建多个变量,那么变量之间的名称不可以重复。

  2. 对于float和long类型来说,字母后缀F和L不要丢掉。

//定义单精度变量
float f=1.5F;
//定义长整型变量
long l=1.123456789L;
  1. 如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。

  2. 有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用。

  3. 变量使用不能超过作用域的范围。

    【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。

  4. 可以通过一个语句来创建多个变量,但是一般情况不推荐这么写。

6. 运算符

6.1 算数运算符

运算符含义
+加法运算
-减法运算
*乘法运算
/除法运算(只取商,不取余数)
%取模运算(只取余数,不取商)
++ --自增自减运算

注意事项

  1. 如果两个整数相除时,结果只保留整数部分,小数部分会被舍弃

    System.out.println(5/2);	//结果是2,小数部分会被舍弃
    
  2. 如果希望保留运算结果的小数部分,使用强制转换类型把其中一个操作数转换为double类型在进行运算即可

    System.out.println((double)5/2);	//2.5
    System.out.println(5/(double)2); 	//2.5
    System.out.println((double)5/(double)2);	//2.5
    
  3. 0和0.0都不能作除数

  4. byte+byte=int:(注意)

    byte b1=10;
    //b1=b1+2;	byte+int=int;不兼容的类型,从int类型转换成byte可能会有精度损失
    //b1=b1+(byte)2;	byte+byte=int;由于编译器的优化,运算结果自动转换为int类型
    b1=(byte)(b1+2)	//强制类型转换
    b1+=2;	//真正等价于b1=(byte)(b1+2)	
    //+=自带强转
    

1) 自增自减运算(只能用于变量,不能用于常数)

独立运算:++i与i++没有区别(自减同理)

混合运算:

变量i++:先把a自己的值赋值给b,变量a再自己加1。最后的结果就是a=2,b=1**(先用后加)**

public static void main (String[] args) {
    int a=1;
    int b=a++;
    System.out.println(a);//2
    System.out.println(b);//1
}

变量++i:变量a先自己加1,再把a赋值给b。最后的结果就是a=2,b=2**(先加后用)**

public static void main (String[] args) {
    int a=1;
    int b=++a;
    System.out.println(a);//2
    System.out.println(b);//2
}

2)四则运算当中的加号“+”有常见的三种用法:

  1. 对于数值来说,那就是加法。

  2. 对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算。

    char类型字符和int类型数字之间的对照关系表:ASCII、Unicode

  3. 对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。
    任何数据类型和字符串进行连接的时候,结果都会变成字符串

String str2 = "Java";
		// String + int --> String
		System.out.println(str2 + 20); //Java20

6.2 赋值运算符

运算符含义
=等于
+=加等(自带强转)
-=减等
*=乘等
/=除等
%=取模等
a+=1-------->a=a+1
b-=2-------->b=b-2
c*=3-------->c=c*3
d/=4-------->d=d/4
e%=5-------->e=e%5

6.3 比较运算符

运算符含义
==等于【两个等号连写才是相等,一个等号代表的是赋值】
>=大于等于
<=小于等于
>大于
<小于
!=不等于

注意事项:

  1. 比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false
  2. 如果进行多次判断,不能连着写。
    (数学当中的写法,例如:1 < x < 3 程序当中【不允许】这种写法。)

6.4 逻辑运算符

运算符含义备注
&&与(并且)全部是true,才是true,否则就是false
||或(或者)至少有一个true,就是true;全都是false,才是false
!非(取反)本来是true,变成false;本来是false,变成true

注意事项:

  1. 逻辑运算符只能用于boolean值。

  2. 与、或需要左右各自有一个boolean值,但是取反只要有唯一的一个boolean值即可。

  3. 与、或两种运算符,如果有多个条件,可以连续写。

两个条件:条件A && 条件B

多个条件:条件A && 条件B && 条件C

6.5 三元运算符

  • 格式:

    数据类型 变量名称 = 表达式 ? 结果1 : 结果2;
    
  • 计算方式

  • 流程:

    ​ 首先判断表达式是true还是false

    ​ 如果是true,那么将左侧的结果1,赋值给变量

    ​ 如果是false,那么将右侧的结果2,赋值给变量

    ​ (二者选其一)

    int num=1>2 ? 10:20;
    System.out.println(num);//20;
    
    int a=10;
    int b=20;
    int max=a<b ? a:b;
    System.out.println(max);//20
    
    int result = 3 > 4 ? 2.5 : 10; // 错误写法!
    

    注意事项:

    1. 必须同时保证表达式A和表达式B都符合左侧数据类型的要求。
    2. 三元运算符的结果必须被使用。

6.6 移位运算符(了解)

  • << 左移运算符,用于将数据的二进制位向左移动,右边使用0补充

  • >>右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充

  • >>>表示逻辑右移运算符(无符号右移),用于将数据的二进制位向右移动,左边使用0
    补充。

    byte b1=13;
    //13的二进制是:0000 1101=>左移一位的结果是0001 1010(26)
    System.out.println(b1<<1);	//左移一位相当乘于2
    
    //右移:0000 1101 =>右移一位的结果是0000 0110(6)
    System.out.println(b1>>1)	//右移一位相当于除以2
    
    byte b2=(byte)(byte<<1)//要使用强转
    

6.7 位运算符(了解)

  • & 表示按位与运算符,按照二进制位进行与运算,同1为1,有0为0.

      0000 1011
    & 0000 1101
    = 0000 1001
    
  • | 表示按位或运算符,按照二进制位进行或运算,有1为1,同0为0.

      0000 1011
    | 0000 1101
    = 0000 1111
    
  • ~ 表示按位取反运算符,按照二进制位进行取反,1为0,0为1.

      0000 1011
    ~  
    = 1111 0100 
    
  • ^ 表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1.

      0000 1011
    ^ 0000 1101
    = 0000 0110
    

6.8 运算符优先级

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江桥诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值