A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© chenyannna 中级黑马   /  2015-9-24 11:50  /  376 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class LianXi {
  2.         public static void main(String[] args) {
  3.                 char[] chs = { 'a', 'b', 'c', 'd', 'b', 'e', 'f', };
  4.                 int num = search(chs, 'b');
  5.                 System.out.println(num);
  6.                 System.out.println(search(chs, 'h'));
  7.         //        System.out.println(search(null, 'f'));
  8.         }
  9.         public static int search(char[] chs, char ch) {
  10.                 if (chs == null)
  11.                         throw new IllegalArgumentException("输入不能为null");
  12.                 for (int i = 0; i < chs.length; i++) {
  13.                         if (ch==chs[i])
  14.                                 return i;
  15.                 }
  16.                 return -1;
  17.         }
  18. }
复制代码


==在这里作用于引用类型应该比较的是地址值。
问题1:那么都既然想比较字符是否相等;那么用equals行不行呢?怎么用呢?
问题2:用contains行不行呢?怎么做?

2 个回复

倒序浏览
本帖最后由 heshiwei 于 2015-9-24 12:38 编辑

这里,你的概念理解的不对,==是判断地址的运算符,但是也要分情况:
1.当操作数为数值时(int,short,long,byte,char 等等),==判断的是两者的数值是否相等,相等返回true,否则false。
2.当操作数为对象的引用,则==判断是两个应用是否相同。
上面两条可以总结为:==判断的是操作数变量在栈内存是否相同。

eqauls如果不被重写, 和==其实是相同的(可以这么理解,其实还是有点区别),因为Java不像.net可以重载运算符,所以通过重写Object的equls来实现自定义的比较。
contains则完全比较的是内容了,而且只有集合、String、StringBuilder、StringBuffer等实现了Sequence接口的对象才有。

关于这个章节的内容,可以在Java基础视频中看到,里面有很详细的讲解。但是建议你再看看别的资料,作为补充。形成自己的理解。
回复 使用道具 举报
heshiwei 发表于 2015-9-24 12:36
这里,你的概念理解的不对,==是判断地址的运算符,但是也要分情况:
1.当操作数为数值时(int,short,lon ...

谢谢很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马