目录

  • Java中length、length()、size()的区别以及“==”与equals的区别
  • length
  • length()方法
  • size()方法
  • == 与 equals 的区别
  • 对象之间的比较
  • 基本类型或变量之间的比较


Java中length、length()、size()的区别以及“==”与equals的区别

之前感觉分清楚了,但是写代码的时候碰上总是会恍惚一下,今天再详细整理一下。

length

1.重要的事情强调三遍

length是数组的一个属性!
length是数组的一个属性!
length是数组的一个属性!

2.为什么数组有length属性?

因为数组是一个容器对象,它保存了一定数量的某一类型的值。当一个数组被创建出来,它的长度已经固定,可以被视作一个final实例变量,所以数组长度被认为是数组的一个属性。

length()方法

length()是字符串String的一个方法

看一下length()的源代码

private final char value[];
 
public int length() {
        return value.length;
    }

可以看到,length()方法最后还是调用的数组的长度属性来返回字符串的长度,但需要注意的是,因为String在计算机中都是以byte数组的方式进行存储,所以这里返回的其实是byte数组的长度,它的长度就等于字符串的长度。

size()方法

size()方法,是集合的一个方法

仍然看一下源码

private final E[] a;
 ArrayList(E[] array) {
       if (array==null)
             throw new NullPointerException();
       a = array;
} 
public int size() {
       return a.length;
}

值得注意的是,集合中没有length()方法,并且相比起String的length方法多了一个判空的处理。

== 与 equals 的区别

可以看下equals()的源码:

public boolean equals(Object e){
return e instanceof(Integer) && (Integer)e.value == value;
}

可以看到Object类中的equals方法在实现时仍然使用的“” ,但在某些类中它是被重写了的,所以对于equals和 “”的区别,需要进行分类讨论。

对象之间的比较

当比较的是两个对象时,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double、String时,“==”比较的是对象之间的引用,即比较的是对象在内存中的地址,而equals方法比较的是对象的内容。
值得注意的是,对String(字符串)、StringBuffer(线程安全的可变字符序列)、StringBuilder(可变字符序列)而言还需要考虑缓存的情况。

public class Day1513 {
public static void main(String[] args) {
Integer nineA = new Integer(9);
Integer nineB = new Integer(9);
System.out.println(nineA == nineB);//false
System.out.println(nineA.equals(nineB));//true
Integer i1 = 9;//自动装箱,Integer i1 = Integer.valueOf(9);
Integer i2 = 9;//自动装箱,Integer i2 = Integer.valueOf(9);
//使用Integer.valueOf(int i)方法,如果字面值是-128-127,就会从缓存中获取一个对象
System.out.println(i1 == i2);//true
System.out.println(i1.equals(i2));//true
}
}
基本类型或变量之间的比较
  • 对于字符串变量来说,使用“”和“equals()”方法比较字符串时,其比较方法不同。“”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。
  • 对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
  • 如果是基本类型比较,那么只能用==来比较,不能用equals