一道有关数据类型的笔试题

题目

There are 4 variables:

short v1 = 18;

Long v2 = new Long("18");

Long v3 = new Long(18);

Short v4 = new Short(v1);

Which of the following statements are true:

A) v1 == v2

B) v2 == v3

C) v3.equals(v1)

D) v3.equals(v4)

解答

v1 == v2 的结果true,因为基本数据类型和对象比较时,比较的是value,所以v1 == v2,v1 == v3都返回true。

但v2 == v3的结果是false,因为v2,v3是两个不同的对象,==比较的是它们在内存的地址。

如果

        Long v2 = 18L;
        Long v3 = Long.valueOf(18);

这时,v2 == v3就将返回true,因为java5.0后会自动装箱,而在-128到127之间的Long实例,系统做了cache,它们指向的是同一个实例对象。

    public static Long valueOf(long v) {
        return  v >= 128 || v < -128 ? new Long(v) : SMALL_VALUES[((int) v) + 128];
    }

    /**
     * A cache of instances used by {@link Long#valueOf(long)} and auto-boxing.
     */
    private static final Long[] SMALL_VALUES = new Long[256];

    static {
        for (int i = -128; i < 128; i++) {
            SMALL_VALUES[i + 128] = new Long(i);
        }
    }

v3.equals(v1), v3.equals(v4)都将返回false,看Long的equals()

    @Override
    public boolean equals(Object o) {
        return (o instanceof Long) && (((Long) o).value == value);
    }

因为v1,v4都不是Long类型的,所以会返回false。

大家觉得v4.equals(v1)的结果呢?

结果是true,这点我也优点纳闷,equals()方法要求的参数是Object,可v1是基本数据类型呀,但没有编译错误,且返回true,应该是v1自动类型转换成Object的了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 14:38:14

一道有关数据类型的笔试题的相关文章

一道简单的 Java 笔试题,但值得很多人反思

面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要最终给Leader一句“这个人技术还行/很好/非常好”,就行了.至于其它能力.综合水平,由别人把关.为此,在挑选唯一的一道笔试题时,我特别地上心. 首先,我不敢用网上那些广为流传的,比如Leetcode.<程序员面试宝典>里的题——这些都太难了!正儿八经做,其实很少有人能在1小时内完美做出来,除非之前遇

一道Realtek的C笔试题

上周五参加Realtek的笔试题,有一道选择题,大概是这样的: const char a1[] = "abc"; const char a2[] = "abc"; const char *p1 = "abc"; const char *p2 = "abc"; A.a1和a2一样,p1和p2不一样: B.a1和a2不一样,p1和p2一样: C.a1和a2不一样,p1和p2也不一样: D.a1和a2一样,p1和p2一样: 我在VS

一道阿里的在线笔试题

如需转载请留言. 题目如下: 有一个消息队列集群,集群里每台Broker的响应时间RT都不一样,但是每台Broker的极限服务QPS都是一样的,超过这个QPS会出现过载雪崩.而消息的生产者客户端,每次发送都会选择其中的一台broker来发送,一般来说发送逻辑是运行在一个线程池里面.假设cpu资源充足,通过实现一个负载均衡算法,使得生产者能够达到最大吞吐量,最优的平均响应时间,但是又不能把任何一台服务器压垮.已知每个broker的rt.极限qps,消息生产者的线程数量,请求总数,如果采用吞吐量最优

分享一道弹性盒模型笔试题

请用弹性盒模型原理写出类名为divA divB divC三个元素横排三列(出divA宽度为50px,以外,其他平分剩余空间)的HTML与CSS. <style> body{ margin:0; padding:0; } .box{ width:100%; height:50px; display:flex; flex-direction:row; } .divA{ width:50px; background:blue; } .divB,.divC{ flex:1; } .divB{ back

一道有趣的微软笔试题

老师d 的物理测验答案在教室里丢失了,今天那个教室上了5 堂课,老师d 上了3 堂,有可能是a.b.c 三个同学盗窃已知:1.a 上了两堂课2.b 上了三堂课3.c 上了四堂课4.a.b.c 每个人都上了老师d 的两堂课5.五堂课中,三个人到堂的组合各不相同6.老师d 的课中有一堂,三个人中到了两个,事后证明不是那两个人偷得问?是谁偷得

一道 Python 类的笔试题详解

r = {} class C(object): def __init__(self, a, b): self.a = a self.b = b if b == 'a': orig = super(C, cls) r[cls.instance] = 1 a = C(1, 'a') b = C(1, 'a') c = C(1, 'b') l = [a, b, c] for i in l: if i not in r: r[i] = 1 else: r[i] += 1 assert r[a] == 2

一道简单易错笔试题

#include<stdio.h> int main(int argc, char* argv[]) { char c=128; printf("十进制c=%d\n",c); printf("十六进制c=0X%0X\n",c); return 0; } 结果为 十进制c= -128: 十六进制c=0XFFFFFF80: 解析: 128的十六进制是0x80, 也就是2^7, 二进制看起来像这样:1000 0000 ,赋值给有符号数char c,其二进制不变

序列和-------一道大厂秋招笔试题

题目: 给出一个正整数N和长度L,找出一段长度大于等于L的连续非负整数,他们的和恰好为N.答案可能有多个,我我们需要找出长度最小的那个. 例如 N = 18 L = 2: 5 + 6 + 7 = 18 3 + 4 + 5 + 6 = 18 都是满足要求的,但是我们输出更短的 5 6 7 综合网上给出的参考答案,有两种相对简单,用python语言重写一下. 方法一:从数列的角度出发 解题思路:等差数列求和. 该题可理解为“一段长度大于等于L的等差数列之和等于N”的过程. S =L(a1+an) /

[360笔试题]赛马

这是一道360的在线笔试题: 赛马,有25匹马,每次只能5匹马进行比赛,比赛只能得到5匹马之间的快慢程度,而不是速度,请问,最少要比多少次,才能获得最快的前3匹马? 解答:这道题乍一看,第一感觉就是肯定要分组,5个一组分成5组,然后比赛,得到每组的组冠军.然后让5个组冠军比赛得到前三名,似乎这样就可以了,这也是我的第一反应. 但是这是一套错误的方案,有可能有这样的分组,那就是第一组的5匹马是实力最强的,这种情况就得到不前三名.于是还要加赛一场,注意只取前三名. 最终答案要经过三步: 1.把25匹