(一)、Java复习笔记之语言基础

时间:2022-02-08 22:16:37

1、二进制、八进制、十进制、十六进制

(1)不同进制数据的表现形式:

  • 二进制的数据表现形式
    • 由0,1组成。以0b(b可以大写也可以小写)开头
  • 八进制的数据表现形式
    • 由0,1,…7组成。以0开头
  • 十进制的数据表现形式
    • 由0,1,…9组成。整数默认是十进制的
  • 十六进制的数据表现形式
    • 由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
  • 案例演示
    • 输出不同进制表现100的数据。
    • 0b100
    • 0100
    • 100
    • 0x100

(2)不同进制数据的相互转化:

二进制、八进制、十进制、十六进制之间的转换

2、原码、反码、补码

  • 原码
    • 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
    • 通过一个字节也就是8个二进制位表示+7和-7
    • 0(符号位) 000 0111
    • 1(符号位) 000 0111
  • 反码
    • 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
  • 补码
    • 正数的补码与其原码相同;负数的补码是在其反码的末位加1。
  • 计算机以补码的形式运算

3、基本数据类型(4类8种)

  • 整数型
    • byte 占一个字节 -128到127
    • short 占两个字 -2^15~2^15-1
    • int 占四个字节 -2^31~2^31-1 (默认整型)
    • long 占八个字节 -2^63~2^63-1
  • 浮点型
    • float 占四个字节 -3.403E38~3.403E38 单精度
    • double 占八个字节-1.798E308~1.798E308 双精度 (默认浮点型)
  • 字符型
    • char 占两个字节 0~65535
  • 布尔型
    • boolean
      • boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小

4、数据类型转换之隐式转换

  • 取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算。
  • 隐式转换顺序:byte、char、short、int、long、float、double

5、数据类型转换之强制转换

  • 强制转换问题
    • int a = 10;
    • byte b = 20;
    • b = a + b;//报错
  • 强制转换的格式
    • b = (byte)(a + b);
  • 强制转换的注意事项
    • 如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同

6、面试题之变量相加和常量相加的区别

  • 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
  • byte b1 = 3;
  • byte b2 = 4;
  • byte b3 = b1 + b2;//报错
    • 从两方面去回答这个题
    • b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值
    • byte类型的变量在进行运算的时候,会自动类型提升为int类型
  • byte b4 = 3 + 4;
    • 3和4都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了

7、字符和字符串参与运算

  • +在有字符串参与中被称为字符串连接符
    • System.out.println(“hello”+’a’+1); //helloa1
    • System.out.println(‘a’+1+”hello”); //98hello
    • System.out.println(“5+5=”+5+5); //5+5=55
    • System.out.println(5+5+”=5+5”); //10=5+5

8、char数据类型

  • char c = 97; //正确。0到65535
  • Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
    • 可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节
    • 所以,Java中的字符可以存储一个中文汉字

9、算术运算符的基本用法

  • 算数运算符有哪些
    • +,-,*,/,%,++,–
  • %运算符结果的符号只和左边有关系,与右边无关
    • System.out.println(144 % 17); //8
    • System.out.println(-144 % 17); //-8
    • System.out.println(144 % -17); //8
  • 算术运算符++和–的练习
    • 请分别计算出x,y的值?
      • int x = 4;
      • int y = (x++)+(++x)+(x*10);
      • //x = 6, y = 70
    • 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
      • byte b = 10;
      • b++; //正确。b = (byte)(b + 1);
      • b = b + 1; // 报错。当byte与int进行混合运算时,会提升为int类型。

10、赋值运算符的基本用法

  • 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
    • short s = 1; s = s + 1; // 报错。当short与int进行混合运算时,会提升为int类型。
    • short s = 1; s += 1; //正确。s = (short)(s + 1);

11、逻辑运算符的基本用法

  • 逻辑运算符有哪些
    • &,|,^,!
    • &&,||
  • 特点
    • &逻辑与:有false则false。
    • |逻辑或:有true则true。
    • ^逻辑异或:相同为false,不同为true。
    • !逻辑非:非false则true,非true则false。
  • &&和&的区别
    • 最终结果一样。
    • &&具有短路效果。左边是false,右边不执行。
    • &是无论左边是false还是true,右边都会执行
  • ||和|同理

12、位运算符的基本用法

  • 位运算符有哪些
    • &,|,^,~ ,>>,>>>,<<
  • 特点
    • &:有0则0
    • |:有1则1
    • ^:相同则0,不同则1
    • ~:按位取反
    • <<:左移 左边最高位丢弃,右边补齐0 (左移n位等于乘以2^n)
    • >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1 (右移n位等于除以2^n)
    • >>>:无符号右移 无论最高位是0还是1,左边补齐0
    • 最有效率的算出2 * 8的结果 2 << 3
  • 位异或运算符的特点及面试题
    • ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
    • 面试题:请自己实现两个整数变量的交换。
      • x = x ^ y;
      • y = x ^ y;
      • x = x ^ y;