1.装包拆包问题:
java中每一个基本数据都有一个包装类型与其对应
原始类型:boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
class TestDemo1{
public static void main(String[] args) {
Integer i = 100;
Integer i2 = 100;
System.out.println(i == i2);//输出结果true
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i3 == i4);//输出结果false
}
}
用Integer赋值会进行装包拆包,每种数据类型有特定的方法,java源代码中Integer所用的方法为valueOf()方法,,具体如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
即当i取值在-128~127时,i的值会放在缓存区,当两数进行比较时,会从缓存区直接读取出值,所以输出为true;
当i取值超出该范围时,则会新建一个对象,在比较时比较的是两者的内存地址,所以输出结果为false。
2.变量常量:
根据java程序运行过程中值是否会发生改变,将数据分为常量和变量:
变量:在运行时才能知道值
变量分为三种:实例变量,静态变量,局部变量
局部变量:初始值为0
静态变量:不属于对象,只属于类本身,初始值为0
局部变量:使用时必须初始化
变量命名可以使用字母,数字,下划线和美元符号,但不能用数字和美元符号开头
常量:在进行命名时必须大写,且在第一次赋值后不能改变其值,在编译时统一进行处理
具体可看以下实例:
class Demo{
int a;//实例变量
static int b;//静态变量
void fun(){
int c=10;//局部变量
}
final int A;//常量,必须大写;第一次赋值后不能改变其值
//常量:在编译时统一进行处理
//变量:在运行时才能知道值
}
3.常用运算符
“[]”"()" "."这三种运算符为方法调用,属性获取,运算时优先级最高
class Demo{
int[] array={1,2,3,4,5};
int len=array.length;//获取数组array的长度
一元运算符:!, ~ , ++ , –
class Demo{
int a=11;
boolean m=true;
System.out.println(~a);//用二进制计算,按位取反,结果为-12
System.out.println(!m);//结果为flase
a++;//将a的值+1
System.out.println(~a);
a--;//将a的值-1
System.out.println(~a);
}
加减乘除:+,-,*,/
取模(求余数):%
求余数及除法运算时容易犯计算错误,如下,需要注意:
System.out.println(-10%3);//-1
System.out.println(-10%-3);//-1
System.out.println(10%-3);//1
System.out.println(10%3);//1
float f1 = 5/2;//2.0
float f2 = (float)(5.0/2);//2.5
float f3 = (float)5/2;//2.5
float f4 = 5/(float)2;//2.5
左位移:<<
如22的2进制表示为0000 1011,左移一位后为0001 0110 ,即44,可以将左位移看做乘法
右位移:>>
和左位移计算方法相似,可以看做除法
无符号右移:>>>
在进行右移操作后,在该数二进制表示的符号位上补0
按位与:&
如11&13
11: 0000 1011
13: 0000 1101
结果:0000 1001
按位或:| 按位异或:^
与按位与计算方法相似,异或运算在计算时同为0,不同为1