龙猫12138 2017-06-02 11:26 采纳率: 0%
浏览 949
已采纳

java 关于String的问题,以下第一种比较方法为什么结果和第二种不一样?

一:

String s1 = "hello" ;
String s2 = "hello" ;
System.out.println(s1==s2) ;
System.out.println(s1.equals(s2)) ;
出来的结果都为true
二:
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
出来的结果第一个为false,为什么呢?
此外:
char a [] = {'h','e','l','l','o'} ;
System.out.println(s1.equals(a)) ;
System.out.println(s1.equals(new String (a))) ;
为什么第一个不可以呢?

先多谢各位的热心解答!

  • 写回答

5条回答 默认 最新

  • Enmm 2017-06-02 12:06
    关注

    这个涉及到java常量池的知识和==,equals的区别。
    对于第一种情况 你只是在s1的时候在常量池创建了 hello 当你在s2使用时 因为常量池已经存在 所以直接将s2链接在上面
    对第二种情况 你是在常量池中创建了两个hello 这种操作是安全的 因为不会引起元有对象的改变
    == 和 equals有点区别
    ==表示的是两个二者是同一个对象(可以理解为具有相同的地址)。
    而equals是指二者具有相同的内容
    所以第二个会出现错误
    你可以加我qq 3091972872 一起学习。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器