常量:常量就是程序在运行过程中,其值不能改变的量。
- 类别:整数常量、小数常量、布尔常量、字符常量(单个字符用单引号)、字符串常量(多个字符用双引号)
变量:变量就是在程序运行过程中,其值可以发生改变的量。变量就是一个存储数据的容器。
Java中数据类型有两种:
- 基本数据类型
- 引用数据类型
Java中的八种基本数据类型:选择数据类型的原则,在满足需求的情况下,能小则小。
- 整数的数据类型:
- byte,一个字节八位,2^8 = 256,即-128~127,0在Java中属于正数
- short,短整型,16位bit,2^16 = 65535
- int,整型,32bit
- long,长整型,64bit
- 注意:如果一个整数没有任何修饰,默认是int类型的;如果是long,则需要在数字后加L
- 小数的数据类型:
- float,单精度浮点型,32bit,保留小数位7位
- double,双精度浮点型,64bit,保留小数位16位
- 注意:如果一个小数没有任何修饰,默认是double类型;如果是float,则需要加上f
- 布尔类型:
- boolean:true和false,1字节或4字节
- 如果使用boolean声明一个基本类型的变量,4个字节
- 如果使用boolean声明一个数组类型,那么每个数组的元素占一个字节
- boolean:true和false,1字节或4字节
- 字符类型:
- char,16bit,字符的存储原理是利用编码表
数据类型转换:
- 小数据类型——>大数据类型,自动转换
- 大数据类型——>小数据类型,需要强制转换
- 强制格式:(小数据类型)大数据类型
- integer.toBinaryString( ):数据转为二进制方法
- 如:int i = 128; byte b = (byte) i ;System.out.printIn(b);//128——>-128,并不是127,原理如下负数存储原理:
- 转换注意:
- 凡是byte、short、char数据类型数据,在运算时,都会自动转换成int类型,然后再运算。
- 两个不同数据类型的数据在运算时,结果取决于打的数据类型
二进制数据的最高位1为负数,最高位0是正数。负数存储的是补码。
负数的存储过程:
如何通过补码求出真实的数据:就是存储过程的逆过程(-1、取反、加负号)。
连接符:让任何的数据都能与字符串进行连接。
%:在Java中,做取模运算时,结果的符号取决于,被除数的符号。
i++:后自增在jvm的运行原理
- i的值得变化过程:i = 0 ——>1——>0
+=赋值运算符,在编译时,jvm会自动进行强制类型转换,不需要手动转换了。
- 如:byte b1 = 1;byte b2 = 2;byte b2 = b1 + b2;会报错,需要手动强制转换
- 但是,b2+=b1;就不会报错
比较运算符:两个不同类型的数据是可以比较的,但是,两个类型必须兼容
逻辑运算符:&与、|或、^异或、&&短路与、||短路或
位运算符(二进制数按位的操作):&、|、^异或、~取反
异或:一个操作数A异或同一个操作数两次,那么结果还是A。一般用于加密。
位运算符可能会出现的笔试题目:
1.交换两个变量的值,不准出现第三方变量。
方式1: 定义第三方变量。
int temp = a; //3
a = b; //a = 5
b = temp;
方式2:相加法, 缺点: 两个int类型的数据相加,有可能会出现超出int的表示范围。
a = a+b; // a =8
b = a-b; //b = 8 - 5 = 3
a = a-b; // a = 8 - 3 = 5
方式3: 可以使用异或。 缺点: 逻辑不清晰。
a = a^b; // a = 3^5
b = a^b; // b = (3^5)^5 = 3
a = a^b; // a = (3^5)^3 = 5
2.取出一个二进制数据的指定位数。要求读取该二进制数据的低4位
00000000-00000000-00010100-01001101
& 00000000-00000000-00000000-00001111
------------------------------------------
00000000-00000000-00000000-00001101
移位运算符
x<<y左移:结果就是x * 2^y,不会改变符号
x>>y右移:结果就是x / 2^y,所以正数用0补,负数用1,确保符号不变
x>>>y无符号右移:结果就是,不管正负数,都用0补,可能改变符号
笔试题目:以最高的效率计算2乘以8的结果:
2<<3