long 与 Long
long类型和Long类型是不一样,long类型属于基本的数据类型,而Long是long类型的包装类。
结论
long是基本数据类型,判断是否相等时使用 == ,即可判断值是否相等。(基本数据类型没有equals()方法)。
Long 是引用数据类型,当其数值在[-128,127]之间时,用 == 判断是否相等,亦可用 >、< 比较大小。
基本数据类型都有哪些?那么==与equals()方法区别呢?
基本数据类型:Java 八大数据类型
- 整数类型:byte、short、int、long
- 浮点类型:float、double
- 字符类型:char
- 布尔类型:boolean
整数类型
byte:1个字节,8位,256种状态,取值范围为【-128,127】
short:2个字节,16位,65536种状态,取值范围为【-32768,32767】
int:4个字节,32位,整数类型默认是int类型,取值范围【-2147483648~2147483647】
long:8个字节,64位,long类型表示long类型常量,要加L或者l,建议加L
浮点类型
float:(单精度)4个字节,32位,单精度,能精确到6~7位,声明一个小数类型,要加F或者f,建议加F
double:(双精度)8个字节,64位,双精度,能精确到15~16位,小数类型默认是double类型
字符类型
char:2个字节,16位,字符表示Unicode(万国码)编码表中的每一个符号,每个符号使用单引号引起来,其中前128个符号和ASCII表相同
布尔类型
boolean:占1位,有true和false2个值,一个表示真,一个表示假,一般用于表示逻辑运算
Java八种数据类型
那么==与equals()方法区别呢?
== 在比较基本数据类型,两个对象去比较的时候,便成了比较两个对象的地址,在开始的时候说Long类型是long的包装类因此用 == 比较的时候便会发生错误。
equals()是Object类中的方法,Object是所有类的直接和间接父类,Object类当中的equals源码当中写了,当没有重写equals()方法时,equals()和==的效果是一样的,但是像Long这种包装类都是重写了equals()方法的。
equals()是Object类中的方法,Object是所有类的直接和间接父类,Object类当中的equals源码当中写了,当没有重写equals()方法时,equals()和==的效果是一样的,但是像Long这种包装类都是重写了equals()方法的。
在Long类中,当其数值在[-128,127]之间时,能用==判断是否相等,亦可用 >、< 比较大小。
LongCache方法可看到,如下代码。
private static class LongCache {
private LongCache(){}
static final Long cache[] = new Long[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Long(i - 128);
}
}
LongCache会预先缓存 [-128,127] 范围内的数,通过缓存频繁请求的值带来更好的空间和时间性能,当数据超出此范围,则new一个Long对象;
“==”是比较的地址,超出此范围的数据地址不一致,所以范围内的比较是true,范围外的数据是false。
当Long类型数据超出 [-128,127] 范围时,比较大小可用 >、< 比较,但比较是否相等时,可用equals()方法比较(首先判断数据类型是否相同,然后判断值是否相等);首先通过longValue()方法把Long类型转为long型,再用== 判断是否相等。