java == 和 equals 方法

 注:摘抄自疯狂java
当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量的值相等,就将返回true。
对于两个引用类型变量,它们必须指向同一个对象,==判断才会返回true 。==不可用于比较类型上没有父子关系的两个对象。

实例:
int it = 65;
float f1 = 65.0f;
system.out.println(it==fl);//输出true
char ch = 'A';
system.out.println(it==ch);//输出true
String str1 = new String("hello");
String str2 = new String("hello");
system.out.println(str1 == str2);//输出false
system.out.println(str1.equals(str2));//输出true
system.out.println("hello" == new EqualTest());//输出编译错误

Integer a = new Integer(3);
Integer b = 3;
int c = 3;
int d = new Integer("3");

System.out.println(a == b);//false
System.out.println(a == c);//true
System.out.println(a == d);//true

System.out.println(b == c);//true
System.out.println(b == d);//true
System.out.println(c == d);//true

常量池:
专门用于管理在编译期就被确定并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口中的常量,还包括字符串常量。

String s1 = "疯狂java";
String s2 = "疯狂";
String s3 = "java";
String s4 = "疯狂" + "java";
String s5 = "疯" + "狂" + "java";
String s6 = s2 + s3;
String s7 = new String("疯狂java");

System.out.println(s1 == s4);//输出true
System.out.println(s1 == s5);//输出true
System.out.println(s1 == s6);//输出false,如果s2和s3用final修饰(宏变量),则输出为true。
System.out.println(s1 == s7);//输出false




final定义的宏变量:
final int a = 5+2;
fianl double b = 1.2 / 3;
final String str = "疯狂" + "java";
final String book = "疯狂java讲义:" + 99.0;
//下面的book2变量的值因为调用了方法,所以无法在编译时被确定下来
final String book2 = "疯狂java讲义:" + String.valueOf(99.0);
system.out.println(book == "疯狂java讲义:99.0");//输出true
system.out.println(book2 == "疯狂java讲义:99.0");//输出false



=======自动装箱的陷阱=========
public class Test1 {
    public static void main(String[] args) {
        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3l;
        System.out.println(c == d);
        System.out.println(e == f);
        System.out.println(c == (a+b));
        System.out.println(c.equals(a+b));
        System.out.println(g == (a+ b));
        System.out.println(g.equals(a + b));
//        true
//        false
//        true
//        true
//        true
//        false
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值