龙猫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 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗