文章目录
一、数据类型转换
- 按理说,这段代码会报错(应为99L,而不是99),可是没有,怎么回事?
long num1 = 99 // 左边是long类型,右边是int类型,发生了什么?
- 当数据类型不一样时,将会发生数据类型转换。
1. 自动类型转换(隐式)
- 特点: 代码不需要特殊处理,自动完成
- 规则: 数据范围从小到大转换。(从大到小不行)(是数据范围,不是占用内存大小)
public class Demo1DataType{
public static void main(String[] args){
// int-->long,符合从小到大,自动
long num1 = 99;
// float-->double,符合从小到大,自动
double num2 = 9.9F;
/*
long类型的内存占用更大,
但这里比较的是数据范围,
所以float更大。
long-->float,符合从小到大,自动
*/
float num3 = 99L;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
}
2. 强制类型转换(显式)
不能自动转换时,需要特殊的格式进行强制转换
// 变量类型 变量名 = (变量类型) 数据;
public class Demo2DataType{
public static void main(String[] args){
byte num1 = (byte)99L;
System.out.println(num1);
}
}
强制类型转换,会有很多类型
- 数据溢出:
byte num2 = (byte)500
- 精度损失:
int num3 = (int)3.7 // 小数部分直接丢失
3. 数学运算
- byte/short/char 这三种类型都可以发生数学运算
char的计算是拿字符对应的ASCII值(比如A的char值是65)。
System.out.println('A') // A
System.out.println('A' + 1) // 66
在运算时,都会被首先提升成为int类型,然后再计算。
byte num4 = 33;
byte num5 = 66;
// byte sum45 = num4 + num5; // 这里会报错,因为右边是int
byte sum45 = (byte)(num4 + num5);
System.out.println(sum45);
在java中,boolean不能发生数据类型转换
4. ASCII编码
计算机这个重色轻友的家伙,只认得0和1。我们认识的10进制,认识的字母,怎样让他认出来呢?答案就是硬射映射。
10进制和2进制,有一一对应的关系,如果让10进制数和字符有一一对应的关系,那么2进制和字符不就有一一对应的关系嘛?常言道,我对象的对象,还是我对象(这是迎男而上的哲学)。
- 这个处对象的过程,就叫编码表。(其中记录美国字符处对象过程的,叫做ASCII)
ASCII表 - 把这几个记住就行(后面按顺序推):
48–>0
65–>A
97–>a
char s1 = '1';
System.out.println(s1); // 1
System.out.println(s1 + 0); // 49
char s2 = 'a';
// 符合从小到大,发生自动类型转换
int num6 = s2;
System.out.println(num6); // 97
二、运算符
- 运算符: 进行特点操作的符号,如“+”
- 表达式: 用运算符相连的式子
1. 算数运算符
1.1 +-*/%
&字符串连接
运算符 | 说明 |
---|---|
+ | 加法运算,字符串连接运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++ 、 -- |
自增自减运算 |
- java中整数运算,不会产生浮点数(除法会舍去小数部分)
- 一旦运算涉及不同类型,结果将会按照数据类型范围大的那种(浮点数和整数相加得浮点数)
- 对于字符串String而言,加号代表连接操作(字符串加其他数据类型,还是字符串)
- 运算有优先级,记住,小括号优先级最高即可。(这样也可以让代码可读性更强)
1.2 自增自减运算符
自增自减运算符,可以让原本的值±1。常量不可以使用。
- 使用格式:
++变量名
或变量名++
- 使用方式:
单独使用:++变量名
和变量名++
没有任何区别,完全一样
混合使用(赋值,打印之类):++变量名
,变量立马+1,任何拿着结果进行使用(先加后用)
变量名++
,首先使用变量原值,任何再让其+1(先用后加)
注: 最后的代码可读性很差,日常生活不要这样写
2. 赋值运算符
复合
赋值运算符 | 含义 |
---|---|
= | 等于 |
+= | 加等于 |
- = | 减等于 |
*= | 乘等于 |
/= | 除等于 |
%= | 取模等 |
- 会发现:
a += b --> a = a + b
复合赋值运算,隐含了一个强制 类型转换。
3. 比较运算符
比较运算符,是将两个数据进行比较。比较的结果是boolean
符号 | 说明 |
---|---|
== | 比较符号两边数据是否相等,相等结果是true。 |
< | 比较符号左边的数据是否小于右边的数据,如果小于结果是true。 |
> | 比较符号左边的数据是否大于右边的数据,如果大于结果是true。 |
<= | 比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true。 |
>= | 比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是true。 |
!= | 不等于符号 ,如果符号两边的数据不相等,结果是true |
4. 逻辑运算符
逻辑运算符只能用于布尔值,产生布尔值。
运算符 | 说明 |
---|---|
&& 短路与 |
1. 两边都是true,结果是true;2. 一边是false,结果是false;短路特点:符号左边是false,右边不再运算 |
|| 短路或 |
1. 两边都是false,结果是false;2. 一边是true,结果是true;短路特点: 符号左边是true,右边不再运算 |
! 取反 |
1. ! true 结果是false;2. ! false结果是true |
- 短路效果,可以节省性能。只要短路了,后边的代码,压根不会执行。
- 与或能将n个条件连写。
5. 三元运算符
- 一元运算符: 只需要一个数据,如:取反
!
,自增++
- 二元运算符: 需要两个数据,如:加法
+
,赋值=
- 格式:
条件 ? 值1:值2;
条件为true,返回值1
条件为false,返回值2
- 注意: 三元运算符一定要使用,赋值也好,直接打印也罢,一定要使用。
如果是赋值的话,值的数据类型要满足变量的数据类型。
三、方法入门
有一个很著名的罗老师,罗翔老师,他姓张,有个外号叫张三。
张三昨天很无聊,拿起一本刑法,战术摸下巴,然后去犯罪了。
张三今天很无聊,拿起一本刑法,战术摸下巴,然后去犯罪了。
张三以后肯定天天无聊,天天拿起一本刑法,天天战术摸下巴,然后去犯罪。
- 写成代码长这样:
public class Demo1DataType{
public static void main(String[] args){
System.out.println("看刑法")
System.out.println("战术摸下巴")
System.out.println("去犯罪")
System.out.println("看刑法")
System.out.println("战术摸下巴")
System.out.println("去犯罪")
System.out.println("看刑法")
System.out.println("战术摸下巴")
System.out.println("去犯罪")
// ......
}
}
- 那么问题来了 ,张三累不累?
- 答 ,张三累不累,我不知道,但是我累。
有没有办法,让我不那么累?把张三的日常,写成一个“张三的一天”这个方法,每次张三无聊时,都使用这个方法就行。
方法的重要功能,就是提高代码复用性
最基本的方法格式
- 最基本的方法格式:
public static void 方法名称(){ // 方法名使用小驼峰
方法体;
}
方法定义无先后顺序
方法的定义不能包含嵌套包含关系
- 调用:
方法名称();
- Demo: 张三的一天