V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
uCharles
V2EX  ›  问与答

[ Java ] String str1 = new String("悟空") + new String("八戒"); String str2 = str1.intern();

  •  
  •   uCharles · 2021-11-10 14:39:25 +08:00 · 893 次点击
    这是一个创建于 1101 天前的主题,其中的信息可能已经有所发展或是发生改变。
    System.out.println(str1 == str2);

    true

    今天看了常量池这个东西,感觉都绕晕了
    11 条回复    2021-11-11 11:19:37 +08:00
    mercury233
        1
    mercury233  
       2021-11-10 14:51:33 +08:00
    曾经不看教材直接改过 java 代码,被字符串相等的判断坑了一脸,简直不像高级语言
    orangie
        2
    orangie  
       2021-11-10 14:58:59 +08:00
    只能说,java 很忠实地告诉你两个指针是相等的……乖乖用 equals😑
    AoEiuV020
        3
    AoEiuV020  
       2021-11-10 15:02:42 +08:00
    老面试题了,然而应用层开发压根不该管这个,无脑 equals ,任何时候都不要用==判断字符串相等,
    hidemyself
        4
    hidemyself  
       2021-11-10 15:03:42 +08:00   ❤️ 1
    String str1 = new String("ja") + new String("va");             
    String str2 = str1.intern();             
    System.out.println(str1==str2);        
    试下这个

    贴一个 R 大的回答        
    如何理解《深入理解 java 虚拟机》第二版中对 String.intern()方法的讲解中所举的例子? - RednaxelaFX 的回答 - 知乎
    https://www.zhihu.com/question/51102308/answer/124441115
    uCharles
        5
    uCharles  
    OP
       2021-11-10 15:16:19 +08:00
    @AoEiuV020 哎,太卷了
    uCharles
        6
    uCharles  
    OP
       2021-11-10 15:16:42 +08:00
    @hidemyself 本来有点了解了,你这举个例子又迷糊了
    anzu
        7
    anzu  
       2021-11-10 15:30:02 +08:00
    @hidemyself 有拿这个来当面试题的,目的不在于题目本身,而是测试面试人有没有读过这本书,没看过就答不上来。都卷到这地步了。
    SurfaceView
        8
    SurfaceView  
       2021-11-10 15:35:02 +08:00
    我没记错的话 1.7 和 1.8 的话这个答案还不一样 这种八股文真是没意思。。。
    kop1989
        9
    kop1989  
       2021-11-10 15:39:31 +08:00
    类似的还有 Integer == Integer (伪代码)

    虽然我本人不面试后端的应聘者,但能回答正确这个问题,在我本人的心目中肯定是不加分的。
    只能证明他 /她真的认真背过题,所以我接下来和他 /她的交流我要小心验证其工作经历,以及其技术掌握度的真实性。
    hidemyself
        10
    hidemyself  
       2021-11-10 15:43:48 +08:00
    @anzu
    @kop1989
    额,这个我还真会。。
    大环境就是这样,面试动辄底层源码实现,各种偏题怪题,有什么办法?
    我面的大多数都会问 GC 调优,但是在我有限的职业经历中,需要开发者去 GC 调优的情况基本没有,只能背
    更不用说
    LLaMA2
        11
    LLaMA2  
       2021-11-11 11:19:37 +08:00
    一对双胞胎 Alice 和 Bob,简直一模一样,判断相等的时候能用==吗?不能,应为他们不是同一个人啊。用 equals 就可以。
    Alice 有个外号叫 Alex ,现在问你 Alex 和 Alice 相等吗,是的,是==的。

    ==说明两者就是一个对象
    equals 说明两者一模一样,但不是同一个对象,同时这个一模一样的比较标准取决与对象的 hashcode 实现
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1354 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:56 · PVG 01:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.