Java基础

1、八种基本数据类型

1.1、整数类型

  • byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
  • short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
  • int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1
  • long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。

1.2、浮点数类型

  • float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
  • double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。

1.3、字符类型

  • char:16位,存储Unicode码,用单引号赋值。

1.4、布尔类型

  • boolean:只有true和false两个取值。

2、Java不同数据类型之间的运算

2.1自动类型转换(低-高)

数据类型转换必须满足如下规则:

1、不能对boolean类型进行类型转换。

2、不能把对象类型转换成不相关类的对象。

3、在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

数据类型容量大小关系

  • byte short char > int > long > float > double
  • byte short char之间不能互相转换

分析:byte类型参与运算,首先会转换为int类型;当int 、 long 、 float 、 double三种数据类型混合运算时,得到的返回值类型将根据容量取最大值

2.2强制类型转换(高-低)

  • 强制类型转换需注意内存溢出问题,例如下面代码:
int i = 200;
        byte b = (byte) i;
        System.out.println(b);//运行结果为-56
  • 此时int类型的i将内存中的值存入b,由于b类型为byte无法储存如此“庞大”的数值则会出现内存溢出的情况
  • 强制类型转换还需注意精度丢失问题,例如下面代码:
double pi =3.1415926535;
        float i = (float)pi;
        System.out.println(i);//运行结果为3.1415927
  • 此时double类型的pi将内存中的值存入i,由于i类型为float是单精度,比double类型精度要小,所以会造成精度丢失的情况

3、Java运算符

  • java中位运算符主要有:按位与&、按位或|、按位非~、按位异或^。
  • 在使用时,需要将运算数都转换为二进制再进行运算,若为负数则使用补码表示。

非位运算值表

A

~A

1

0

0

1

与位运算值表

A

B

A&B

1

1

1

1

0

0

0

1

0

0

0

0

或位运算值表

A

B

A | B

1

1

1

1

0

1

0

1

1

0

0

0

异或位运算值表

A

B

A&B

1

1

0

1

0

1

0

1

1

0

0

0

移位运算符

移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。

运算符

含义

例子

<<

左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)

x<<3

>>

"有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1.

x>>3

>>>

"无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0.

x>>>3

例如:

System.out.println(16>>3);//2
        System.out.println(16/2/2/2);//2
        System.out.println(50<<5);//1600
        System.out.println(50*2*2*2*2*2);//1600
        System.out.println(16>>>3);//2

结论:

1、左移运算符相当于做乘法,左移几位则乘几个2

2、右移运算符相当于做除法,右移几位则除以几个2