今天是学习java的第二天,对于今日学习总结如下:
1、什么是隐式转换和强制转换类型?
1.1隐式:数据类型从小到大,取值范围从小到大,就是将范围小赋值给范围大的时候,java底层会自动进行类型的转换;
1.2强制转换:格式 例:byte num = (byte) 10;想要哪个类型就在小括号中写什么类型;
Tips:1)小数的作用范围永远比整数的作用范围大;
2)byte :short:int:long:float:double:char=1:2:4:8:4:8:2 各表示所占的字节数;
3)在Java中小数是使用科学计数法进行存储的
2、三种转换机制
2.1byte,short,char类型的变量,在参与运算的时候,会自动类型提升为int类型后进行运算;
2.2 变量进行运算时候,变量类型不一样, 会转换成范围大的那个类型;
2.3常量优化机制 short a = 3+ 5; 正确
例:.short result = 1 + 1;
//等号右边去都是常量,没有任何变量参与运算
//编译之后,得到的.class字节码文件当中相当于short result = 2;右侧的常量结果数值,没有超过左侧范围,所以正确;
//称为编译器的常量优化
//一旦表达式当中有变量参与,那么就不能进行这种优化;
short result = 3 + a + 3;
变量可以变化;
System.out.println(result);
如果右侧的表达式当中全都是常量,没有任何变量;
那么编译器javac将会直接将若干个常量表达式计算得到结果;
tip:对于byte/short/char类型来说,如果右侧赋值的数值没有超过对应类型的范围,那么javac编译器将会自动隐含地补上一个强制转换(byte)/(short)/(char)
byte num = 10;->byte num = (byte) 10;javac自动地进行了强制转换操作;
System.out.println(num);->10
3、自增和自减
前++:++a 先加后用
1)先进行自增
2)将自增后的结果拿出来
3)将拿出来的结果参与运算
例:int a = 1;
int b = ++a + a++;
//a 3 b 4
先执行++a
先将a进行自增,此时a为2,把自增后的值2拿出来。拿着2参与运算。所以前面就相当于 2 +
再进行后面的操作。
先把值2拿出来,再进行自增,此时a为3.将拿出来的结果2参与运算,所以后面就相当于 + 2
整体就相当于: 2 + 2 = 4.
a的值:3 b的值:4
后++:a++ 先用后加
1)先将值拿出来
2)再进行自增
3)将拿出来的值进行运算
例:int a = 1;
int b = a++ + a++;
3.1.1先将a的值1拿出来。再进行自增,此时a的值为2.再拿着1参与运算。所以前面就相当于 1 +
3.1.2先将a的值2拿出来。再进行自增,此时a的值为3.再拿着2参与运算。所以后面就相当于 + 2
整体:
1 + 2 = 3。
a的值:3 b的值:3
4、字符串的连接 +
System.out.println(10+20+“a”);30a
System.out.println(10+“a”+20);10a20
字符串的连接后生成一个新的字符串String;
5、逻辑运算符
&& 短路效果:若左边的为false,右边的将不再执行,反之右边的执行
|| 短路效果:若左边的为true,则右边的将不在执行,反之右边的执行
例:
int a = 10;
System.out.println(3>4 && ++a < 100);//因为左边3>4已经不成立为false,所以后面的代码就不会再执行,返回结果为false
System.out.println(a);//由于&&右边的语句不会被执行,所以++操作不会被执行,sout返回原值a即10;
& 不管左边是什么,右边的判断都会执行
| 不管左边是什么,右边的判断都会执行
!取反 非真即假
tips:java中逻辑运算符&和&&/|和||的区别:
1.单个逻辑运算符:运算符左右两边表达式都会进行判断操作,之后在根据true或false返回对应的表达式值;
2.成对逻辑运算符:先判断运算符左边表达式是否为true,如果为true将继续进行右边表达式的判断;
如果左边表达式为false,则逻辑运算符右边的表达式将不会执行
6、三元运算符
格式:数据类型 变量名 = 判断表达式 ? 表达式A : 表达式B ;
【注意】三元运算符的结果必须被使用;
例:1)System.out.println(a > b?a:b);//正确 三元运算符被使用,进行sout打印输出
2)a > b?a:b;//错误写法,没有被使用
7、方法
格式:public static void 方法名(){}
优点:提高代码的可复用性和可维护性;
注意:方法不能进行嵌套操作:
public static void method(){
public static void method_1(){
}
}//方法的定义中有嵌套方法,错误写法
8、1)int a = 10;
a = a +20;
2)int a = 10;
a+=20;两者的区别?
输出结果是一样的,但是+=里面隐藏了一个强制类型转换;
9、数据类型转换的原理
根据bit位进行转换
范围小的转换成范围大的,补0
反之去掉不要;
byte -128-127
10000000-01111111
例:int a = 300;
byte b= (byte)a; 输出a的结果为:44(即多余为去掉)
10、Jshell使用
在cmd中直接写jshell
退出/exit
遗留问题:byte num = 100L;long>byte 会报精度溢出异常;