Java基础

Java基础

1.JDK 和 JRE 的区别

A. JDK:java Development Kit的简称,即java开发工具包,提供Java的开发环境和运行环境。
B. JRE:Java Runtime Environment的简称,即Java运行环境,为Java的运行提供了所需环境。

总结:具体来说JDK其实包含了JRE,同时还包含了编译器(javac),还包含了很多Java程序试调和分析工具。

2. == 和 equals 的区别

A. ==
对于基本类型和引用类型 == 的作用效果是不同的
eg:
基本数据类型:比较的是是否相同
引用数据类型:比较的是引用是否相同

String x = "Hello";
String y = "Hello";
String z = new String("Hello");

//true
System.out.println(x == y);

//false
System.out.println(x == z);

//true
System.out.println(x.equals(y));

//true
System.out.println(x.equals(z));

解析:x 和 y 指向的同一个引用,所以 == 也是 true
new String()方法则是重新开辟了内存空间,所以 == 结果是 false
equals比较的一直是,so 结果都是 true。

B. equals
equals本质就是 == ,不过 String 和 Integer 等重写了 equals 方法,从而变成了的比较。
eg:

其结果为 false,则说明其本质就是 ==
源码为:

public boolean equals(Objeect obj){
     return (this == obj);
}

到这里,我们发现两个相同值的 String 对象,为何会返回 true 呐?

String t1 = new String("你好");
String t2 = new String("你好");
//true
System.out.println(t1.equals(t2));

同样的,进入 String 和 equals 方法中:
eg:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                      i++;
            }
            return true;
        }
    }
    return false;
}

从而可以看出 String 重写了 Object 的 equals 方法,其引用比较变成了值比较!

总结:
= = 对于基本类型来说是的比较,对于引用类型来说是引用的比较。
equals 默认是比较引用,但很多类会重写其 equals 方法,
eg:String,Integer 等重写 equals 方法,从而引用比较变成了值的比较
因此,一般情况下 equals 比较的是值是否相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值