一.Java中的常量/变量
变量 ;实例变量
静态变量
局部变量
public class TestDemo1 {
int i;//实列变量 存放在堆中
static int c;//静态变量,不属于对象,只属于类本身 存放在方法区中
void funny(){
int a=10;//局部变量,使用前必须初始化。存放在虚拟机栈中
//字母 数字 下划线 美元符号
final int A = 10;//A叫做常量
final int A;
A = 10;
}
}
常量的特性:在编译时候统一处理。
变量的特性:在运行时候才能知道它的值。
二.java中的拆包/装包
java为每一个基本数据类型都引入了对应的包装类型,int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换,对应如下:
原始类型:boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
所以最基本的一点区别是:Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。
public class TestDemo1 {
public static void main(String[] args) {
int i = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);
System.out.print(i==i2);//integer会自动拆箱,所以为true
System.out.print(i==i3);
Integer i4 = 127;//编译时被翻译成:Integer i4 = Integer.valueOf(127);
Integer i5 = 127;
System.out.print(i4==i5);//true
Integer i6 = 128;
Integer i7 = 128;
System.out.print(i6==i7);//false
}
}
关键是valueOf()函数,这个函数是对于-128~127之间的数进行缓存,下次再写入Integer i5 = 127时,就会直接在缓存中取,不会再new了,所以i4和i5的比是true。
总结:
1.Integer与new Integer是不会相等的,不会经历拆箱过程,new出来的对象放在堆中,而非new的Integer常量则在常量池(方法区),他们的内存地址不一样,所以为false。
2.两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false。因为java在编译Integer i2 = 128的时候,被翻译成:Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存。
三.运算符
. [] {} (方法调用属性获取) 优先级最高
class TestDemo1 {
int[] array = {1.2.3.4.5.6};
int a =array[0];
int len = array.length;
一元运算符:! ~ ++ -
class TestDemo1 {
int a =2 ;
boolean
n = true;
System.out.print(~a);//用二进制计算,且按位取反,其结果是-3.
System.out.print(!n);//这是非运算所以是false。
a++;//将a的值+1
System.out.print(a):
a--;//将a的值-1;
System.out.print(a):
加减乘除:+ - * /
再求除法和模运算时注意:
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 小括号运算级高,所以答案为2.5
float f3 = (float)5/2;//2.5
左移:<<
如3的二进制数 0000 0011 左移则变为0000 0110 为6 相当于3X2=6; 即左移就是乘法。
右移 :>>
3的二进制0000 0011 右移则变为0000 0001 为1 相当于除2所以为1
按位或/按位异或: |
/^
按位异或 相同为0 不同为1
如; 0000 1011
^ 0000 1101
结果:0000 0110
按位或 0000 1011
| 0000 1101
结果:0000 1111