自学Java笔记3——类型转换、运算符

二、类型转换、运算符

        (一)类型转换

                1、自动类型转换

                        1)定义:

                                · 类型范围小的变量,可以直接赋值类型范围大的变量

byte a = 20;
int b = a; //发生了自动类型转换
System.out.println(a);
System.out.println(b);
/* 20
   20 */

                        2)底层原理:

                                a        00001100  (8位)        12

                                b        00000000 00000000 00000000 00001100  (32位)        12

                        3)自动类型转换的其他形式:

                                byte → short → int → long → float → double

                                             char → int

int age = 23;
double db = age;
System.out.println(db); // 23.0

char ch = 'a'; // 00000000 01100001
int code = ch; // 00000000 00000000 00000000 01100001
System.out.println(code); // 97

                2、表达式的自动类型转换

                        1)定义:

                                · 在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再运算

                                byte、short、char → int → long → float → double

byte a = 10;
int b = 20;
double c = 1.0;
double rs = a + b + c;
System.out.println(rs); // 31.0

double rs2 = a + b - 2.3;
System.out.println(rs2); // 27.7


//面试题
byte i = 100;
byte j = 120;
int k = i + j; //此时的i、j已为int类型,故k为int类型
System.out.println(k); // 220

                        2)注意事项:

                                · 表达式的最终结果类型由表达式中的最高类型决定

                                · 在表达式中,byte、short、char直接转换成int类型参与运算的。

                3、强制类型转换

                        场景:

                                int a = 功能1();                        int a = 20;

                                功能2(byte b);                         byte b = a; // 报错

                        问题:

                                · 类型范围较大的数据或变量,不能直接赋值类型范围小的的变量,会报错

                        1)定义:

                                · 可以强行将类型范围大的变量、数据赋值给类型范围小的变量

                                数据类型 变量2 = (数据类型)变量1、数据

                        2)底层原理:

int a = 20;
byte b = (byte)a;
System.out.println(a); // 20
System.out.println(b); // 20

                                a 00000000 00000000 00000000 00010100   (32位)

                                                                                   b 00010100   (8位)

int i = 1500;
byte j = (byte)i;
System.out.println(j); // -36

                                i 00000000 00000000 00000101 11011100   (32位)

                                                                                   j 11011100   (8位)

                        3)注意事项:

                                · 强制类型转换可能造成数据(丢失)溢出

                                · 浮点类型强转成整型,直接丢掉小数部分,保留整数部分返回

        (二)运算符

                1、基本算数运算符

                        1)运算符:

                                · 对字面量或者变量进行操作的符号

                        2)算术运算符:

符号作用说明
+进行加法时以加号将各项连接起来
-进行减法时以减号将各项连接起来
*进行乘法时以乘号将各项连接起来,与“×”相同
/与“÷”相同,注意:在Java中两个整数相除结果还是整数
%取余获取的是两个数据做除法的余数
int a = 10;
int b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3.33333 → 3
System.out.println(a * 1.0 / b); // 3.33333
System.out.println(3 / 2); // 1
System.out.println(3 * 1.0 / 2); // 1.5
System.out.println(3 / 2 * 1.0); // 1.0
System.out.println(a % b); // 1

                        eg. 数值拆分

                                一个三位数,将其拆分为个位、十位、百位后,打印在控制台

public class OperatorTest {
    public static void main(String[] args) {
        int data = 589;

        //个位
        int ge = data % 10;
        System.out.println(ge);

        //十位
        int shi = data / 10 % 10;
        System.out.println(shi);

        //百位
        int bai = data / 100;
        System.out.println(bai);
    }
}

                2、+符号做连接符

                        · “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。

int a = 5;
System.out.println("abc" + 'a'); // abca
System.out.println("abc" + a); // abc5
System.out.println(5 + a); // 10
System.out.println("abc" + 5 + 'a'); // abc5a
System.out.println(15 + "abc" + 15); // 15abc15
System.out.println(a + 'a'); // 102
System.out.println(a + "" + 'a'); //5a
System.out.println(a + 'a' +" banana "); // 102 banana 
System.out.println("banana" + a + 'a'); // banana5a
System.out.println("banana" + (a + 'a')); // banan102

                        · 能算则算,不能算就在一起。

                3、自加自减运算符

                        1)

符号作用说明
++自增

变量自身的值加1

--自减变量自身的值减1

                        注意:

                                · ++ 和 -- 既可以放在变量的后边,也可以放在变量的前边。

                                · ++、-- 只能操作变量,不能操作字面量的。

                                · ++、-- 如果不是单独使用(如在表达式、或者同时有其它操作),放在变量前后会存在明显区别。

                                        → 放在变量前面,先对变量进行+1、-1,再拿变量的值进行运算

                                        → 放在变量后面,先拿变量的值进行运算,再对变量的值进行+1、-1

int i = 10;
int j = ++i;
System.out.println(i); // 11
System.out.println(j); // 11

int m = 10;
int n = m++;
System.out.println(m); // 11
System.out.println(n); // 10

                        eg.案例(面试题)

int k = 3;
int p = 5;
// k   3 4 5 4
// p   5 4 3 4
// rs    3   + 5   - 4   + 4   - 5   + 4   + 2
int rs = k++ + ++k - --p + p-- - k-- + ++p + 2;
System.out.println(k); // 4
System.out.println(p); // 4
System.out.println(rs); // 9

                4、赋值运算符

                        1)就是“=”。先看“=”右边

                        2)扩展赋值运算符

符号作用说明
+=加后赋值

a += b 等价于 a = (a的数据类型)(a + b);将a + b的值给a

-=减后赋值a -= b 等价于 a = (a的数据类型)(a - b);将a - b的值给a
*=乘后赋值a *= b 等价于 a = (a的数据类型)(a * b);将a * b的值给a
/=除后赋值a /= b 等价于 a = (a的数据类型)(a / b);将a / b的值给a
%=取余后赋值a %= b 等价于 a = (a的数据类型)(a % b);将a % b的值给a

                        注意:扩展的赋值运算符隐含了强制类型转换。

                5、关系运算符

                        · 是对数据进行条件判断的符号,最终会返回一个比较的布尔结果(true,false)

符号说明
==

a==b,判断a和b的值是否相等,成立为true,不成立为false

!=a!=b,判断a和b的值是否不相等,成立为true,不成立为false
>a>b,判断a是否大于b,成立为true,不成立为false
<a<b,判断a是否小于b,成立为true,不成立为false
>=a>=b,判断a是否大于等于b,成立为true,不成立为false
<=a<=b,判断a是否小于等于b,成立为true,不成立为false

                        注意:在做相等判断是,千万不要把 == 误写成 =

int a = 10;
int b = 10;

boolean rs = a == b;
System.out.println(rs); // true

System.out.println(a == b); // true
System.out.println(a != b); // false
System.out.println(a > b); // false
System.out.println(a >= b); // true
System.out.println(a < b); // false
System.out.println(a <= b); // true

int i = 10;
int j =5;
System.out.println(i == j); // false
System.out.println(i != j); // true
System.out.println(i > j); // true
System.out.println(i >= j); // true
System.out.println(i < j); // false
System.out.println(i <= j); // false

System.out.println(i = j); // 5

                6、逻辑运算符

                        1)定义:

                                · 可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果。

符号介绍说明
&逻辑与必须都是true,结果才是true;只要有一个false,结果一定是false
|逻辑或只要一个为true,结果就是true
逻辑非你真我假、你假我真。!true=false、!false=true
^逻辑异或如果两个条件都是false或者都是true则结果是false。两个条件不同结果都是true。
&&短路与判断结果与“&”一样。过程是左边为false,右边则不执行。
||短路或判断结果与“|”一样。过程是左边为true,右边则不执行。

                                注意:逻辑与“&”、逻辑非“|”:无论左边是false还是true,右边都要执行

double size = 9.8;
double storage = 6;
System.out.println(size >= 6.95 & storage >=8); // false
System.out.println(size >= 6.95 | storage >=8); // true

System.out.println(!true); // false
System.out.println(!false); // true

System.out.println(false ^ true); // true
System.out.println(true ^ false); // true
System.out.println(true ^ true); // false
System.out.println(false ^ false); // false


int a =10;
int b =20;
System.out.println(a > 100 & ++b > 10);
System.out.println(b); // 21

int i = 10;
int j = 20;
System.out.println(i > 2 || ++j > 10); // true
System.out.println(j); // 20

int c = 10;
int d = 20;
System.out.println(c > 2 | ++d > 10); // true
System.out.println(d); // 21

                7、三元运算符

                        1)格式:

                                条件表达式 ? 值1:值2;

                        2)执行流程:

                                首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2

double score = 18;
String rs = score >= 60 ? "考试通过" : "挂科";
System.out.println(rs); // 挂科

int a = 10000;
int b = 2000;
int max = a > b ? a : b;
System.out.println(max); // 10000

                         案例:求三个整数的最大值

                                需求:定义三个整数,找出最大值并打印在控制台。

                                分析:

                                ①用三元运算符获取前两个整数的最大值,并用临时变量保存起来。

                                        · num1 > num2 ? num1 : num2;

                                ②用三元运算符,让临时最大值和第三个整数比较,并记录结果。

                                        · temp > num3 ? temp : num3;

                                ③输出结果

int i = 10;
int j = 30;
int k = 50;

int temp = i > j ? i : j;
int rsMax = temp > k ? temp : k;
System.out.println(rsMax); // 50

/*        拓展知识
int raMax1 = i > j ? ( i > k ? i : K ) : ( j > k ? j : k ); // 可以没有括号
System.out.println(rsMax1); // 50
*/

                8、运算符优先级

                        · 在表达式中,哪个运算符先执行后执行是要看优先级的,例如“*、/”的优先级高于“+、-”。

优先级运算符
10
2!、-、++、--
3*、/、%
4+、-
5<<、>>、>>>
6<、<=、>、>=、instanceof
7==、!=
8&
9^
10|
11&&
12||
13?:
14=、+=、-=、*=、/=、%=、&=
System.out.println(10>3 || 10>3 && 10<3); // true
System.out.println((10>3 || 10>3)&& 10<3); // false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值