对象的生存周期可以大于变量的生存周期
*有可能造成溢出 byte
长度不一样的类型相互赋值时,短的可以给长的,长的不能给短的
运算符:单目、双目、三目
ArithmeticException 运行时出错 (运行异常,算术异常) eg:17/0、0/0
实型:运行无异常
17.0/0 = infinity(正无穷大)
-17.0/0 = -infinity(负无穷大)
0/0.0=NaN
取余
整数取余:17/4=4
17%4=1
17%18=17 (被除数小于除数,则为被除数)
0%17=0
ArithmeticException 运行时出错 (运行异常) 17%0=
17.6 mod 4=1.6000000000014 小数不变,整数取余
17.6 mod 0=NaN
-17.6 mod 0=NaN
0.0 mod 0=NaN
关系运算
5==3 false
n1=130;n2=130;
等值比较(适用于基本类型、引用类型)
Integer n1=new Integer(47);
Integer n2=new Integer(47);
n1==n2;false 地址是否一样,两个变量的内容比较
n1==n2; true 这两个变量指的是同一个对象
equals比较 (只限于引用类型。 基本类型不能用)
n1.equals(n2);n2.equals(n1); true
n1=null,则运行异常 NullPointerException(空指针异常) 空串儿也是对象
integer复写了equals,对象比较, 类型、每个属性是否相同
a1与a2只能等值比较 a1、a2在栈里开辟空间
a1=130;a2=130;
a1==a2;
a1.equals(a2); 基本类型不能用,没有重写equals方法, 对象才可以用
装箱:n1=130 n1:Integer类型, 130false
Integer n1=new Integer(130);
Integer n2=new Integer(130);
n1==n2 120 true 方法的常量区存放(-128 ~ 127的Integer类型)
equals比较也为true 基本类型的300转换为Integer类型赋值给引用类型
Integer类型赋给引用类型的变量 超过了在堆里创建对象,未超过则在方法区的常量池创建对象,效率提高,只创建了一个对象
String类型的等值比较和equals比较
用于项目的注册、登录
String str1;
str1=new String(“Hello”);
String s2=new String(“Hello”);
str1==str2 false
str1.hashCode()
str2.hashCode()//此时调用hashCode一样
//哈希地址比较,为true
Question:
如果两个对象的hashCode相同,能否说明这两个对象是同一个对象 no
反之,两个对象的地址一样,可以证明哈希地址相同。
字符串的哈希地址不是它的真正地址
减少存储碰撞,提高检索与查找的速率
str1.equals(str2) // true
表单里拿到一个数据,字符串类型,String
表单里什么都没写,参数值为空串儿,不为null
Equals比较
登录时,表单的equals来比较数据库的equals,都为String类型, 不产生空指针
超级管理员,硬编码,equals比较 常量.equals()
eg: “Hello”.equals(str2);
复选框 checkbox 一个都不选则为null