变量与运算符
数据类型,常量,变量
常量
固定不变的值, 直接量(字面量) .
变量
变量的定义
顾明思义,是可以变化的量.其本质是一块内存空间,用来存放某一类型的常量
特征:
1.变量没有固定值,该区域的数据可以在同一类型变化
2.可以被重复使用
3.拥有名字,变量名
4.有属于自己的存储空间
声明变量格式:
数据类型 变量名 = 初始值;
数据类型 变量名;
变量命名规则
- 同一作用域内,变量名不能重复
- 可以用数字,字母,下划线,$来命名,但是不能数字开头
变量命名规范
- 满足驼峰法命名:classCount
- 见名知意
基本数据类型的转换
数据类型分为:基本数据类型,引用数据类型
引用数据类型
- 数组
- 类 String等
- 接口
基本数据类型
基本数据类型分别为:
整型:
byte(1字节) , short(2字节) , int(4字节) , long(8字节)
1.long类型常量,要加L或者l
2.整数类型默认为 int 类型
小数类型:
float(单精度浮点型)(4字节) , double(双精度浮点型)(8字节)
1.float类型精确到6-7位,double精确到15-16位
2.float类型常量,要加F或者f
字符型:
char(2字节) : 'a' 单引号
布尔型:
boolean(1字节) :用于表示对错 true ,false
String 字符串类型
String name = "小罗"; //用双引号括起来
例子
//int类型 4字节
System.out.println(10);
//long类型 8字节
System.out.println(15L);
//float类型 4字节
System.out.println(3.14F);
//double类型 8字节
System.out.println(3.14);
//char类型 2字节
System.out.println('a');
//boolean类型 1字节
System.out.println(true);
注意:
float和double为浮点数,浮点数不精确,存在舍入误差
//float与double存在精度问题,不能做等于比较
float f2 = 3.1415926f;
double f3 = 3.1415926;
System.out.println(f2); //3.1415925 存在精度丢失 存小数点6~7位
System.out.println(f3);//3.1415926 存小数点15~16位
问:0.1 和1.0/10 不相等 **特别**不能做等于的比较
基本数据类型转换
- 自动类型转换:范围小的数据类型直接转换为范围大的数据类型
- 强制类型转换:范围大的数据类型强制转换为范围小的数据类型
自动类型转换
//自动类型转换(隐式)
long num1 = 20; //整数默认为int类型
//long类型转换为float 类型
float f = num1;
System.out.println(f); //20.0
//float 转换为double类型
double d = f;
注意:
//int类型能自动转换成float类型,一般选择double和int类型进行结合使用
//自动类型转换时,存在精度问题
int count = 2147483647;
float price = count;
System.out.println(price); //2.14748365E9
//特殊情况:jvm内部优化,我们可以直接把int类型的常数赋值给byte,short,char
byte count1 = 15;
short count2 = 10;
char count3 = 97;
这里提及一下
float占4个字节为什么比long占8个字节大?
因为底层的实现方式不同
自动类型提升
数值会自动容纳提升到最大的数据类型
//在进行运算时,多种数据类型进行运算,最终会提升到最高的数据类型.
double d1 = 55 + 3.14f + 3.14 + 88L;
System.out.println(d1);
char c = 'a'; //a对应的ASCII码为97
int c1 = c + 1;
System.out.println(c1); //98
强制类型转换
//强制类型转换(显式)
//定义一个byte类型,一个int类型
byte b1= 2;
int b2 = 5;
/*byte b3 = b1+b2; //编译报错,因为b2是int类型,此时b1也是int类型,b3是byte类型 */
//强转byte类型
byte dd = (byte)(b1+b2);
System.out.println(dd);
例子:
//精度丢失的类型转换:把多余的小数点去掉.double类型强转int类型
int i = (int)3.14;
System.out.println(i); //3
//特殊情况:信息丢失的强制类型转换
short count7 = 300;
byte count8 = (byte)count;
System.out.println(count8); //44
//注意:如果运算过程中,类型不一致,自动进行强制类型转换
char c ='a';
c += 1; //c = (char)(c+1) 作出了强制转换
System.out.println(c); //b
算术运算符
加减乘除,取模运算:
//定义a,b变量
int a = 12;
int b = 5;
//加减乘除
//加号可以进行加法运行,字符串拼接,正负号表示
System.out.println(a+b);//17
System.out.println(a-b);//7
System.out.println(a*b);//60
System.out.println(a/b);//整除 2
//取模(取余数)
System.out.println(12%5); // 2
//加号还可以进行字符串拼接
System.out.println(5+4+",祝你们99");
System.out.println(10/0); //报错,除数不能为0,ArithmeticException
自增和自减
-
自增:++
-
自减:–
int a1= 10; int b1 = ++a1; //先对a1进行+1,在运行结果 System.out.println("a1="+a1+",b1="+b1); //a1=11,b1=11 int a2 = 6; int b2 = a2++; //先进行运算,再加1 System.out.println("a2="+a2+",b2="+b2);//a2=7,b2=6
赋值运算符
变量 = 表达式或者常量值
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | int a=5; | 5 |
+= | 加后赋值 | int a=5; a+=2; | 7 |
-= | 减后赋值 | int a=5; a-=2; | 3 |
*= | 乘后赋值 | int a=5; a*=2; | 10 |
/= | 整除后赋值 | int a=5; a/=2; | 2 |
%= | 取模后赋值 | int a=5; a%=2; | 1 |
a +=10 ; //等于 a = a +10;
int a3 = 7;
a3 += 10; //a3 = a3+10 即 7+10=17
System.out.println(a3); //17
比较运算符
比较运算符: == ,!=,<,>,>=.<=
比较常量与变量之间的大小关系,结果是布尔类型boolean
格式:
boolean result = 表达式A 比较运算符 表达式B;
//常量操作
System.out.println(10>2); //true
System.out.println(10>=2); //true
System.out.println(10<5);//false
System.out.println(10<=5);//false
System.out.println(10==10);//true
System.out.println(10!=10);//false
//变量操作
int a = 10;
int b = 2;
boolean result = a > b;
System.out.println(result); //true
三元运算符
三元运算符:有三个元素参与表达式运算
数据类型 变量 = boolean表达式 ? 结果A : 结果B;
-
为true,结果是A
为false,结果是B -
结果A与结果B数据类型是相同
例子:
//需求:判断99是不是偶数
int a = 99;
String result = a % 2==0 ? "偶数" : "奇数";
System.out.println(result);
//需求:分页,55条数据,每页10条,一共多少页
int totalCount = 55;
int pageSize = 10;
int totalPage = totalCount % pageSize ==0 ?totalCount/pageSize :totalCount/pageSize+1;
System.out.println(totalPage);
逻辑运算符
运算符 | 运算规则 | 例子 | 结果 |
---|---|---|---|
& | 与 | false & true | false |
| | 或 | false | true | true |
^ | 异或 | true^false | true |
! | 非(取反) | !true | false |
&& | 短路与 | false && true | false |
|| | 短路或 | false || true | true |
例子:
int a = 10;
int b = 20;
int c = 30;
//与操作
System.out.println( (a>b) & (a>c));//false & false = false
System.out.println((a>b) & (a<c));//false & true = false
System.out.println((a<b) & (a>c));//true & false = false
System.out.println((a<b) & (a<c));//true & true = true
//或操作
System.out.println((a > b) | (a > c));// false | false =false
System.out.println((a > b) | (a < c)); // false | true =true
//非操作
System.out.println((a > b)); // false
System.out.println(!(a > b)); // !false=true
/*
*&,|:无论左右真假,都得运行
*&&:左边确认为真,右边继续执行 ,左边为假,右边不参与运行.
*||:左边为真,右边不参与运行
*/
System.out.println(false & 1/0==1); //报错,右边执行了
System.out.println(false && 1/0==2); //不报错,右边没有执行
System.out.println(true | 1/0==1); //报错,右边执行了
System.out.println(true || 1/0==1); //不报错,右边没有执行
运算符优先级
思维导图