基本数据类型和包装类
在Java中,一切皆对象
所以有一个矛盾: “基本数据类型不是对象”,为了解决这样的矛盾,可以采用基本数据类型包装的形式描述
class MyInt { // 基本数据类型包装类
private int num; // 这个类包装的是基本数据类型
/**
* 包装类是为了基本数据类型准备的,所以构造方法中需要明确接收一个数字
* @param num
*/
public MyInt(int num) { // 将基本类型包装类
this.num = num;
}
/**
* 通过包装类取得所包装的基本数据类型
* @return 保证的数据
*/
public int intValue() { // 将包装的数据内容返回
return this.num;
}
}
public class TestDemo {
public static void main(String args[]) {
MyInt mi = new MyInt(10); // 将 int 包装为类 装箱
int temp = mi.intValue(); // 将对象中包装的数据取出 拆箱
System.out.println(temp * 2); // 只有取出包装数据后才可以进行计算
}
从 JDK 1.0 开始,为了方便用户的开发,Java 专门给出了一组包装类,来包装 8 种基本数据类型:byte(Byte)、short(Short)、int(Integer)、long(Long)、float(Float)、double(Double)、
char(Character)和 boolean(Boolean)。
以上给出的包装类又可以分为以下两种子类型。
• 对象型包装类(Object 直接子类):Character、Boolean。
• 数值型包装类(Number 直接子类):Byte、Short、Integer、Long、Float、Double
包装类默认值为 null,而基本数据类型有具体内容。 在实际的开发中,包装类是一定会使用到的概念,现在使用最多的地方就是在简单 Java 类中,而且使用包装类有一个最大的好处就是其有 null 的数据,这在与数据库的操作上会显得特别方便(尤其是外键数据处理上)。而除了简单 Java 类之外,大部分情况下程序中出现的数据,使用基本数据类型操作会更加方便。
== 和 equals()
-
对于基本数据类型(数值型,字符型,布尔型),如:byte,short,int,long,float,double,char,boolean, == 比较数值是否相等
-
对于引用数据类型 (类,接口,数组;类进行引用传递时,传递的是堆内存的使用权)
== 比较 对象内存地址(堆内存)是否相同,
equals () 在默认不被重写方法的情况下,比较的也是对象堆内存地址的值 (对象比较)
在String 类中的equals方法比较的是字符串的内容是否一样(方法被重写)
在包装类中,如Integer 类的equals方法比较的是基本数据类型的数值是否相等
在数组类 Arrays 类中,equals方法比较两个数组是否相等
/*String类源码*/ 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; } /*Integer类源码*/ private final int value public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; } /*Arrays类源码*/ public static boolean equals(int[] a, int[] a2) { if (a==a2) return true; if (a==null || a2==null) return false; int length = a.length; if (a2.length != length) return false; for (int i=0; i<length; i++) if (a[i] != a2[i]) return false; return true; }