复习:

  1. 注释:再生续重解释说明的文字 单行注释,多行注释,文本注释
  2. 计算机常量:整数、小数、字符、字符串、布尔、空
  3. 进制:二进制–0b 八进制–0 十六进制–0x
  4. 变量:先定义后使用,先赋值后使用,在哪儿定义在哪儿使用
  5. 数据类型:基本类型(byte short int long float double char boolean),引用类型(数组,类,接口)
  6. 数据类型转换:自动转换(小转大,整转小)、强制转换(大转小,小转整)
  7. 运算符:算术运算符(±x/+±-%)、赋值运算符
public class OperatorDemo{public static void main(String[] args){byte b = 127;b = b + 1;//会报错,因为b是变量不是字面量,java不能确定是否会超限System.out.println(b);}
}


字面量:literal
变量:variable

public class OperatorDemo{public static void main(String[] args){byte b = 127;b ++;//编译通过,结果为-128System.out.println(b);}
}


cmd命令: javap -c -v -s OperatorDemo

D:\dedu\day2>javap -c -v -s OperatorDemo
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Classfile /D:/dedu/day2/OperatorDemo.classLast modified 2022年1月23日; size 410 bytesSHA-256 checksum 8a0b58bea984668b62c30fb415b7a4206363e6f52eb26a9ca386c0aaf62c2094Compiled from "OperatorDemo.java"
public class OperatorDemominor version: 0major version: 61flags: (0x0021) ACC_PUBLIC, ACC_SUPERthis_class: #19                         // OperatorDemosuper_class: #2                         // java/lang/Objectinterfaces: 0, fields: 0, methods: 2, attributes: 1
Constant pool:#1 = Methodref          #2.#3          // java/lang/Object."<init>":()V#2 = Class              #4             // java/lang/Object#3 = NameAndType        #5:#6          // "<init>":()V#4 = Utf8               java/lang/Object#5 = Utf8               <init>#6 = Utf8               ()V#7 = Fieldref           #8.#9          // java/lang/System.out:Ljava/io/PrintStream;#8 = Class              #10            // java/lang/System#9 = NameAndType        #11:#12        // out:Ljava/io/PrintStream;#10 = Utf8               java/lang/System#11 = Utf8               out#12 = Utf8               Ljava/io/PrintStream;#13 = Methodref          #14.#15        // java/io/PrintStream.println:(I)V#14 = Class              #16            // java/io/PrintStream#15 = NameAndType        #17:#18        // println:(I)V#16 = Utf8               java/io/PrintStream#17 = Utf8               println#18 = Utf8               (I)V#19 = Class              #20            // OperatorDemo#20 = Utf8               OperatorDemo#21 = Utf8               Code#22 = Utf8               LineNumberTable#23 = Utf8               main#24 = Utf8               ([Ljava/lang/String;)V#25 = Utf8               SourceFile#26 = Utf8               OperatorDemo.java
{public OperatorDemo();descriptor: ()Vflags: (0x0001) ACC_PUBLICCode:stack=1, locals=1, args_size=10: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnLineNumberTable:line 1: 0public static void main(java.lang.String[]);//这里开始执行主函数descriptor: ([Ljava/lang/String;)Vflags: (0x0009) ACC_PUBLIC, ACC_STATICCode:stack=2, locals=2, args_size=10: bipush        127    //内存存储一个变量2: istore_1        //都是int3: iload_14: iconst_1        //常量化5: iadd        //add自增6: i2b           //int to byte7: istore_18: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;11: iload_112: invokevirtual #13                 // Method java/io/PrintStream.println:(I)V15: returnLineNumberTable:line 3: 0line 4: 3line 5: 8line 6: 15
}
SourceFile: "OperatorDemo.java"

底层有强制转换
任何数据在计算机中存储为补码。
原码,反码,补码
补码:规定最高位为符号位,如果为0则为整数,为1则为负数
byte b = 127; //byte占一个字节
127 = 0111 1111 ---- 二进制原码
byte b = -5; // byte 还占一个字节
-5 = 1000 0101 ---- 二进制原码
正数的原码,反码,补码规定一致
+127(正数)
0111 1111 — 原码
0111 1111 — 反码
0111 1111 — 补码

负数的反码:在原码的基础上,0变1,1变0;
负数的补码:在反码的基础上,加1

-5
1000 0101 — 原码
1111 1010 — 反码
1111 1011 — 补码

int i = -19
原码:10000000 00000000 00000000 00010011
反码:11111111 11111111 11111111 11101100
补码:11111111 11111111 11111111 11101101

byte ------- -128~127
byte b = -127
0:0000 0000 ------ 1000 0000
计算机中规定: 1000 0000 可以表示最小值 -128, -0 == -128

赋值运算符

除=外,其余符号均要求已经初始化变量

=
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=
byte b = 120;
b += 55;
System.out.println(b);//b的值为-81

120: 0111 1000 ---- 补码:00000000 00000000 00000000 01111000
55: 0011 1111 ---- 补码:00000000 00000000 00000000 00110111
120 + 55: ----------- 补码:00000000 00000000 00000000 10101111
补码:10101111
反码:10101110
原码:11010001 -------- -81

java中支持变量的连等运算?

public class OperatorDemo{public static void main(String[] args){int j;int i;i = j = 5;i += 3;System.out.println(i);//打印输出8}
}
public class OperatorDemo{public static void main(String[] args){//运算的时候是从左往右编译的//在计算结果的时候从右往左计算//i = 5 + ( 5 - (5/5));int i = 5;i += i -= i /= 5; //9i = 5;i -= i *= i; //-20//i = 5 - (5 * 5);System.out println(i);}
}

面试题:

i = i++; //5

注意赋值运算的脸等运算!

关系运算符(运算结果一定是boolean)

== 判断两个值是否相等
!= 判断两个值是否不相等,<><=>=

逻辑运算符(针对逻辑值的运算)

针对逻辑值进行运算的
与,或,非,异或,短路与,短路或
and,or,not,xor

& – 与运算,表示and,并且,
true & true = true
true & false = false
false & true = false
false & false = false

| – 或运算,表示or,或者
true | true = true
true | false = true
false | true = true
false | false = false

!-- 非运算,表示not,取反
! true = false
! false = true

^ – 异或,x表示xor
相同则为假,不同则为真(eg:电磁学:同极相斥,异极相吸)
ture ^ true = false
false ^ true = true
true ^ false = true
false ^ false = false

&& – 短路与,和与运算的结果是一致的,如果前面的结果是false,后面的表达式就不计算了(有短路特性,效率提升)
|| – 短路或,和||的运算规则相一致,如果前面的结果是true,后面的表达式就不计算了(有短路特性,效率提升)
eg:

public class OperatorDemo{public static void main(String[] args){int i = 3, j = 6;boolean b = i < 2 & j++ > 3;//因为i=3所以b的值一定是false,System.out.println(b);//falseSystem.out.println(j);//7}
}

public class OperatorDemo{public static void main(String[] args){int i = 3, j = 6;boolean b = i < 2 && j++ > 3;//因为i=3所以b的值一定是false,后续不再计算System.out.println(b);//falseSystem.out.println(j);//6}
}


&&在||前不能短路||
||在&&前可以短路&&

位运算(针对整数补码进行计算)

只能算整数,不能算其他
&–与 |–或 ^–异或 <<–左移 >>–右移 >>>–无符号右移 ~–取反

&运算

5&8=0
数据转化为补码,按位与计算:
00000101 – 5
00001000 – 8
00000000 – 0
9&11=0
数据转化为补码,按位与计算:
00001001 – 9
00001011 – 11
00001001 – 9
正数&负数:结果一定是整数
偶数&其他数:结果一定是偶数
0&任何数 = 0
1&奇数 = 奇数
1&偶数 = 0

|运算

5&8=13
数据转化为补码,按位或计算:
00000101 – 5
00001000 – 8
00001101 – 13
9|11=11
数据转化为补码,按位与计算:
00001001 – 9
00001011 – 11
00001011 – 11
负数|任何数:结果一定是负数
奇数|任何数:结果一定是奇数
0 & 任何数:结果是原数

^运算> 5&8=13

数据转化为补码,按位或计算:
00000101 – 5
00001000 – 8
00001101 – 13
9|11=0
数据转化为补码,按位与计算:
00001001 – 9
00001011 – 11
00000010 – 2
任何数 ^ 任何数:结果是0
0 ^ 任何数:结果是原数
a ^ b ^ b = a

交换值的方式

1. 用异或运算交换值

int x = 5, y = 7;
x = x ^ y;
y = x ^ y;
x = x ^ y;
//x = 7, y = 5;

2.加减法交换值

int x = 3, y = 7;
x = x + y;
y = x - y;
x = x - y;

3.第三方变量交换值

int x = 3, y = 7;
int temp = x;
x = y;
y = temp;

三种方式优劣性:

  1. 异或法交换值
  2. 加减法交换值
  3. 第三方变量交换值
    效率:1优于2优于3
    可读性:3最好理解,1,2较难
    局限性:1只能用于交换整数,因此使用受限, 2可能超限,而且小数运算不准确,而3无限制

位运算符:

左移:

3<<2 (向左移动两位)
将数据转化为补码之后按指定的位数移动,溢出的数据舍弃,低位次空出补0,最后转化为十进制
6<<3
6 – 00000110 – 00110000 – 80

左移可能会出现正变负或负变正的情况
在一定范围内,左移几位就是乘以2的几次方

右移:

9>>2(向右移动两位)
00001001
讲数据转化为补码之后按指定位数移动,溢出的数据舍弃,正数补0负数补1
00000010

正数右移,越移越小,最小到0
负数右移,越移越大,最大到-1
在一定范围内,右移几位就是除以2的几次方

无符号右移

将数据转化为补码之后,按照指定的位数向右移动,溢出的数据舍弃,高位次空出,无论正负一律补0,最后结果转化为十进制显示

在进行移位运算的时候,并不是直接移动对应的位数,而是将移动的位对32进行取余,移动的是余数对应的位数
28<<35 = 28<< (35%32) = 28<<3
100 << 32 = 100

取反
快速计算规律:
取负数再减一
~3 = -4
~(-13) = 12
~25 = -26

~3 补码:00000011
转化为补码一律取反:11111100
反码:11111011
原码:10000100
-4
~3 = -4
~(-13) = 12
原码:10001101
反码:11110010
补码:11110011
取反:00001100
补码=反码=原码= 00001100 = 12
~25 =
原码:00011001=反码=补码
取反:11100110
反码:11100101
原码:10011010 = -26

运算符优先级:

算数,赋值,关系,逻辑,位
赋值优先级最低!
算数运算符 高于 关系运算符
算术运算符 高于 位运算符
关系运算符 高于 位运算符

算数:+ - * / ++ – %
赋值:=
关系:== != > < >= <=
逻辑:& | ! ^ && ||
位:& | ! << >> >>>

public class OperatorTest{public static void main(String[] args){System.out.println(3>2+3);//输出false,说明先机算了2+3,因此输出falseSystem.out.println(true && 2>3);//并未报错,说明先机算了2>3然后计算&&System.out.println(true && 2);//会报错!System.out.println(3 + 5 & 1);//输出0,8&1=0,说明先算了算术运算符System.out.println(3 > 5 & 1);//报错,说明先算了关系运算符System.out.println(3 + 2 << 2);//输出20,说明先计算了3+2,5<<2 = 20System.out.println(3 > 2 << 2);//输出falseSystem.out.println(~2 * 5);//8}
}

三元运算符

逻辑值 ? 表达式1 : 表达式2
逻辑值为true,则执行表达式1
逻辑值为false,则执行表达式2
三元摆到时依然是一个表达式,所以需要有一个计算结果,这个计算结果可以被一个变量存储

double d = a > b ? 3.5 : 5 //可以定义一个double类型
a > b ? 3 : true; // 报错,因为结果类型不兼容
double d = a > b ? ‘a’ : 2.26; // char可以自动提升为int,int可以提高为double

运算符的优先级

()
一元运算:~ ++ – !
二元运算:* / % + - << >> >>> 关系 逻辑 & | ^
三元
赋值

扩展

整数n,快速判断n是否是2^x的形式
n & (n-1) == 0

System.out.println(5 * 16);//效率低
//计算过程,先将5和16都转化成最开始的补码,然后开始按位运算
System.out.println(5 << 4);//效率更高

流程控制:
顺序结构:代码从上到下,从左到右依次编译执行
分支结构:判断结构/选择结构
循环结构:

从控制台获取数据:

import java.util.Scanner;
//表示到java.util包下找scanner
public class OperatorTest{public static void main(String[] args){scanner s = new Scanner(System.in);//只有如下三种写法int i = s.nextInt();double d = s.nextDouble();String str = s.nextLine();}
}

【01.23】大数据 -- JAVA基础 P15-P24相关推荐

  1. 【全集】大数据Java基础

    课程介绍 本课程是由猎豹移动大数据架构师,根据Java在公司大数据开发中的实际应用,精心设计和打磨的大数据必备Java课程.通过本课程的学习大数据新手能够少走弯路,以较短的时间系统掌握大数据开发必备语 ...

  2. 大数据java基础吗?

    大数据必备 关于大数据基础知识,以前浪尖写过一篇文章,也多次在 知识星球里分享过经验. 具体学习内容,可以参看如下文章: 入门大数据必读 这个可以看到做大数据的话java是必需品,因为基本所有的大数据 ...

  3. 大数据 -- java基础16 网络编程 TCP UDP

    1.网络编程的三要素:(1)IP地址(2)端口号(3)协议 2.IP地址 : 网络中计算机唯一标识. (1)IP地址在计算机中存储的时候是由二进制的形式进行存储的:IP:192.168.7.42 十进 ...

  4. 大数据 -- java基础8 接口特点和用法

    1.接口:interface关键字     (1)语句定义格式: interface 接口名{} (2)接口是如何实现的呢?         接口不能直接实例化,需要一个关键字供其他类实现该接口:im ...

  5. 大数据Java基础第十二天作业

    第一题:HashMap内部实现原理 HashMap存的是key => value 对的集合,每一对就是一个entry(条目),key和value存的都是对象的引用.key不能存重复的值,key的 ...

  6. 大数据Java基础第十九天作业

    第一题:简单的URL获取资源下载 import java.net.URL; import java.net.URLConnection;import java.io.InputStream; impo ...

  7. 大数据Java基础一

    DataType -------------  基本数据类型   100 int  1.2   1.byte short int long float double   2.boolean[true, ...

  8. 【大数据Java基础-JAVA 数据结构04】java常用类(四)比较器以及其他类

    比较器 1.Java比较器的使用背景: Java中的对象,正常情况下,只能进行比较:== 或 != .不能使用 > 或 < 的 但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需 ...

  9. 大数据Java基础之集合

    欢迎关注公众号: 11-1 Java集合框架概述 11-2 Collection接口方法 11-3 Iterator迭代器接口 11-4 Collection子接口之一:List接口 List实现类之 ...

最新文章

  1. CVPR 2020 | 给Deepfake 假脸做 X-Ray,新模型把换脸图打回原形
  2. Android四种Activity的加载模式(转)
  3. DHCP服务器功能浅析
  4. 《深入理解Android》一2.1 浏览器工作原理概述
  5. lambda捕获this_非捕获Lambda的实例
  6. (转载)Qt中使用cout输出的方法
  7. oracle 字段全大写,Oracle如何批量将表中字段名全转换为大写(利用简单存储过程)...
  8. 电脑开机显示checking media解决方法
  9. 数说:这只程序员组建的乐队为何能进HOT5?
  10. linux 查看c库版本号,C语言再学习 -- 查看版本及内核信息(转)
  11. mongodb执行sql脚本文件
  12. 适用于5G网络的SAF Spectrum Compact 频谱仪
  13. STM8单片机的多通道连续AD采集
  14. 记DeeCamp 2019夏面试
  15. MySQL 常用命令汇总
  16. 2022年,中国餐饮数字化进行到哪一步了?
  17. 第三方社会化评论插件
  18. Nginx Error: socket() [::]:80 failed (97: Address family not supported by protocol)
  19. Oracle-Oracle数据库安全管理
  20. ie firefox 点flash 卡死解决方案

热门文章

  1. 做电商需要注意什么?怎样才能做好云仓?
  2. dnf搬砖哪里最赚钱
  3. 七款你不容错过的设计软件
  4. 子线程更新UI,牵扯activity的启动过程
  5. 3-《电子入门趣谈》第一章_一切从单片机开始-1.2赋予单片机生命
  6. php输出json数据方法
  7. 最新kali之netsniff-ng
  8. 基于租房数据进行数据分析
  9. c语言之字母大小转换
  10. 程序设计六大原则-概况与举例