内容专栏:【JAVA】
本文脉络:数据类型,类型转换与提升,运算符,标识符命名规则
本文作者:Melon_西西
发布时间 :2023.7.12
目录
1. 字面常量
2. 数据类型:四类八种
3.类型转换
3.1 自动类型转换(隐式) 自动类型转换:
3.2 强制类型转换(显式) 强制类型转换:
4.类型提升
4.1 不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
4.2. byte与byte的运算
5. 字符串类型
5.算术运算符
5.1. 基本四则运算符:加减乘除模(+ - * / %)
5.2. 增量运算符 += -= *= %=
5.3.自增/自减运算符 ++ --
5.4. 关系运算符
5.5. 逻辑运算符(重点)
5.5.1 布尔表达式1 && 布尔表达式2(有一个假就是假)
5.5.2. 布尔表达式1 || 布尔表达式2 (有一个真就是真)编辑
5.5.3. 逻辑非 !
6. 位运算符
7. 条件运算符
8. 运算符的优先级
9.标识符
常量即程序运行期间,固定不变的量称为常量,分类:
1. 字符串常量:由""括起来的,比如“12345”、“hello”、“你好”。
2. 整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000
3. 浮点数常量:程序中直接写的小数,比如:3.14、0.49 4. 字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’
5. 布尔常量:只有两种true和false
6. 空常量:null
在Java中数据类型主要分为两类:基本数据类型和引用数据类型。
四类:整型、浮点型、字符型以及布尔型
分别输出long表示的数值的取值范围:
public class Test01 {
public static void main (String []args){
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);//L要大写
}
}
关于小数:
Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分)
float y=12.5;//会报错,不安全,因为大雨了4字节
float y1=12.5f;//这样就不会报错了
double num=1.1;
System.out.println(num*num);//结果不是1.21,而是1.2100000000002
//除法运算小数点:
int a1=1;
int a2=2;
System.out.println(a1/a2);//结果是0,不是0.5,不能够保存小数
double b1=1;
double b2=2;
System.out.println(b1/b2);//结果是0.5,能够保存小数
字节是计算机中表示空间大小的基本单位.
计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte).
我们平时的计算机为 8GB 内存, 意思是 8G 个字节.
其中 1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB.
所以 8GB 相当于 80 多亿个字节.
代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
特点:数据范围小的转为数 据范围大的时会自动进行。
当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的。
int a = 10;
long b = 100L;
//a = b; // 编译失败,不可以把8个字节的给四个字节的
//强制转换(显式):可能丢失数据,用于把大的转为小的
a=(int)b;
//隐式类型转换,编译器自动把a 从int升级为double
b = a; // 可以通过编译
//类型提升
int a1 = 10;
long b1 = 20;
//int c = a1 + b1; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
long d = a1 + b1; // 编译成功:a + b==>int + long--->long + long 赋值给long
注意:
1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
4. 强制类型转换不一定能成功,不相干的类型不能互相转换
. int与long之间:int会被提升为long
对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算
byte a2 = 125;
byte b2 = 123;
//byte c2 = a2 + b2;//报错,因为小于4字节的内容,会提升为int参与运算
byte c2=(byte)(a2+b2);
System.out.println(c2);//强转换,这样可能丢失数据。会截断,结果是-8
int d2=a2+b2;
System.out.println(d2);//结果是228,不发生截断
在Java中使用String类定义字符串类型
String str="HELLO";
System.out.println(str);
//string与int的转换
int a5=100;
//调用String这个类型的方法
String s5=String.valueOf(a5);
System.out.println(s5);
//拼接
String s6=a+"afternoon";//输出100afternoon
System.out.println(s6);
String s7=10+20+"xixi";
String s8="xixi"+10+20;
System.out.println(s7);//输出30xixi
System.out.println(s8);//输出xixi1020
//调用Integer这个类型的方法,来实现转换
String str2="1009";
int t2=Integer.valueOf(str2);
System.out.println(t2+1);//输出1010
都是二元运算符,使用时必须要有左右两个操作数
int / int 结果还是int类型,而且会向下取整
做除法和取模时,右操作数不能为0
% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的
详细看下面例子:
public class Text03 {
public static void main(String[] args) {
//除余的数不可以为0
System.out. println(5/2); //结果是2
System.out.println((float)5/2); //相当于把5转成5.0除以2=2.5
System.out.println(5/(float)2); //相当于2转成2.0,5除以2.0=2.5
System.out.println((float) (5/2));//相当于5/2等于2,把2转成2.0
System.out.println(10%3); //1
System.out.println(10%-3); //1
System.out.println(-10%3); //-1
System.out.println(-10%-3); //-1
System.out.println(11.5%2); //1.5
}
}
该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。
int a = 1;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出3
a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出2
a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出6
a /= 3; // 相当于 a = a / 3
System.out.println(a); // 输出2
a %= 3; // 相当于 a = a % 2
System.out.println(a); // 输出2
++是给变量的值+1,--是给变量的值-1。
如果单独使用,前置++和后置++没有任何区别;如果混合使用:
int a1 = 10;
int b1 = ++a1 ; //a=a+1 ,b=a
System.out.println(a1); //11
System.out.println(b1); //11
int a2 = 10;
int b2 = a2++; //b=a ,a=a+1
System.out.println(a2); //11
System.out.println(b2); //10
【前置++】先+1,然后使用变量+1之后的值,
【后置++】先使用变量原来的值,表达式 结束时给变量+1
只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改
关系运算符主要有六个: == != < > = ,其计算结果是 true 或者 false,没有0或1
int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
//注意这种是错的:
//System.out.println(3
逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型。
语法规则:! 表达式 真变假,假变真。
int a = 1;
System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true
短路求值 && 和 || 遵守短路求值的规则
对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
对于 || ,如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式
& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值
位运算符主要有四个: & | ~ ^ ,~ 是一元运算符外,其余都是二元运算符。
位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位 的每一位依次进行计算. 1。
按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
按位或: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
.按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值
; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.
/ 求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
运算符之间是有优先级的., 在可能存在歧义的代码中加上括号即可
标识符:在程序中由用户给类名、方法名或 者变量所取的名字。
标识符中可以包含:字母、数字以及 下划线和 $ 符号等等。
标识符不能以数字开头,也不能是关键字,且严格区分大小写。
建议:
类名: 每个单词的首字母大写(大驼峰)
变量名、方法名:首字母小写,后面每个单词的首字母大写(小驼峰)