java相等比较:==与equals

比较分两种:变量之间的比较,变量与值的比较,

引用类型值分两种:如: "abcd" , new String("abcd"); “abcd”相当于a=”abcd”中的a, new String("abcd")相当于b= new String("abcd")中的b;

new分配新的内存地址

1.基本类型变量一律用==;因为基本数据类型没有equal方法

2.引用类型变量:(引用类型:类,接口,数组)

==:比较的是他们在内存中的地址,即引用相等

equals:String Integer等比较的是值相等 其他未覆写equals方法比较的则是引用相等

备注:

int a = 3;

int b = 3;

int c = 4;

由于基本数据类型大小可知,生存周期可知(定义在方法中,方法退出之后自动销毁),所以出于追求速度,存放在栈中(仅仅指局部变量),当定义了字段3给a之后,再定义b时,首先找有没有以3为字段的地址,如果有,让b也指向3,也就是说a和b的地址是一样的,上两句代码也就等同于int b = a; 当定义c时,发现没有字段4,那么重新开辟存放字段4的地址,让引用c指向字段4。String (如果一个字符串是 String s = "abc";它放在栈里,如果一个字符串 用创建对象的方式 String s = new String("abc");那它是放在了 堆里 而如果单纯的 一个 "abc" 这个输入字符串常量 是放在static segement/栈/String池里),当执行=时,也有类似先查找有没有相同的字符串的过程. toString()方法?