第3章:数据类型和运算符

3.1 数据类型分类

3.1.1 基本数据类型
3.1.2 引用类型

类,接口,数组,null,引用类型无法转为基本类型

3.2 基本数据类型

3.2.1 整型
  1. byte正好对应1个字节,1个字节包含8位(bit),即可以用8位的2进制数表示
  2. 字节流正好对应一个个字节,一般用byte[]存放
  3. 各整型字节数
    1. byte:1
    2. short:2
    3. int:4
    4. long:8
  4. 如果定义一个long型,且该值大于int的最大值2147483647,数字后面必须加L,否则编译报错
//long a = 2147483648;
long a = 2147483648L;
  1. 二进制:对于负数,java中是以补码的形式显示的
    1. 对于byte型11111111(8位),第一位表示正负,如果为1表示负数,0表示正数,当一个值为负数时,其二进制是以补码的形式显示的。原码=(补码-1)再取反 ,11111111->11111110->00000001,所以值为-1
    2. 对于int型的11111111(8位),由于int为32位,其前面的0被自动隐藏了,所以这是个正数,值为2^9-1
  2. 整型有n位,由于第一位表正负,所以其能表示的最大数值为2的n-1次方-1,例如int型最大能表示的整数值为2的31次方-1
3.2.2 字符型:char(2个字节)

char型包含两个字节,16位,且第一位不表示正负,所以其取值范围为0-65535(2的16次方-1) 。计算机底层保存char型时,实际保存该字符所在系统的默认字符集(windows为Unicode)的编号的值(数字),因此char类型的值可以直接与整型互相转换、运算。unicode编码值的范围为0-65535,unicode编码的前256个字符与ASCII码中的字符完全重合,即’a’的unicode值与ASCII值相同都为97。注意char型与ASCII编码一点关系都没有,不要往一起考虑

  1. 三种表示方法:
//第一种
char a = '9';//该值转为int型后为57,即9的ASCII值为57
char b = 'A';//65
//第二种
//退格
char c = '\b';
//回车符
char d = '\r';
//第三种:\u后表示的是一个十六进制数
char e = '\u1234';
  1. \为转译符号,所以字符串中如果遇到\为避免系统将其当做转译,在其前面再加一个\
//String a = "C:\codes";
String a = "C:\\codes";
3.2.3 浮点型:float(4个字节),double(8个字节)
  1. java使用二进制数据的科学计数法表示浮点型,因此无法精确表示浮点数
  2. 二种表示方法
//第一种:如果定义的变量类型为Double或Float,则值必须有小数点,否则编译错误,因为512为int型,它无法自动装箱为Double或Float型,同理3.0为double型,无法自动装箱为Float型
//Double a = 512;
//Float a = 3;
//Float a = 3.0;
//正确的写法
//a.不使用封装类,使用基本类型
double a = 512;
float a = 3;
//b.如果为Double,后面值加上小数点或d
Double b = .12;
Double c = 512.0;
Double d = 512d;
//c.如果为Float,后面加上f
Float a = 3f;
//第二种:51200为int型,5.12e4为浮点型
double e = 5.12e2;
  1. 小数默认为double型,想获得float型,需要在数据后加f进行强转,否则编译报错
//float a = 3.14;
float a = 3.14f;
3.2.4 布尔型:boolean
  1. 只能为true或false,不能用0或非0表示
  2. 布尔型转String
boolean a = true; 
String b = a+"";

3.3 基本类型转换

3.3.1 自动类型转换
//byte-->short-->int-->long-->float-->double
//char-->int
System.out.println(3+4+"Hello");//7Hello
System.out.println("Hello"+3+4);//Hello34
3.3.2 强制类型转换
  1. 浮点型强转为整数时,直接截断小数部分
  2. int–>byte
32int00000000000000000000000011101001
截断成8byte11101001
发现由1开头,是补码,应该转源码,先-111101000
再取反:00010111
转为10进制,值为-23
3.3.3 表达式类型的自动提升
  1. 除数与被除数都为int,则结果也是int型
//a值为4
int a = 23/5;
//b值为4.0
double b = 23/5;
  1. null可以赋值给任何引用类型的变量
  2. ==对于引用类型,为判断地址是否相同,对于基本类型是判断值是否相同

3.4 运算符补充

3.4.1 >>>与>>
  1. 表示按照二进制把数字右移指定位数,右侧低位移除
  2. “>>>”:左侧高位直接补零
  3. “>>”:左侧高位根据原值正负补0或1
//00001111(15)右移2位,右侧移除,左侧补0为0000 0011(3)
15>>>2
3.4.2 执行顺序:!>&&>||
3.4.3 ||与|、&&与&
  1. 作为逻辑表达式:用于连接两个boolean值
    1. ||与&&拥有短路的功能,比如||左边为true,右侧表达式不会进行,&&左边为假,右边表达式也不会执行
    2. |和&左右两边表达式都会执行
  2. |和&可以作为位运算符:用于连接两个整型值
    1. 会将连接的两个整型值,转为二进制的形式,然后每一位进行比较,对于|,只要有一个为1,就为1,对于&,两边都为1才为1
发布了32 篇原创文章 · 获赞 0 · 访问量 953

猜你喜欢

转载自blog.csdn.net/hanzong110/article/details/102405190
今日推荐