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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

3黑马币
  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行不行呢?怎么做?

最佳答案

4 个回复

倒序浏览
a
  1. //==在这里作用于引用类型应该比较的是地址值。
  2. //问题1:那么都既然想比较字符是否相等;那么用equals行不行呢?怎么用呢?
  3. //问题2:用contains行不行呢?怎么做?
  4. /*
  5. * 答:1 char是基本数据类型,所以没有equals方法, == 比较的直接是char变量的值 ,char类型在内存中实际是ASCII码对应的整数
  6. * 如  char ch = 'a'; 在内存中 ch是整数97,可以直接参加整数运算 int x = 97 - 'a';
  7. *
  8. *          2 想调用类的方法进行比较可以但是需要先将字符转化为字符串,其实String类中提过了获取字符下表的方法indexOf(),
  9. * 只需要先将char[]数组转为字符串就能进行调用,另外contains返回值是boolean,所以只能用来判断,没有办法用于获取角标
  10. */
  11. public class LianXi {
  12.         public static void main(String[] args) {
  13.                         char ch = 'a';
  14.                         int x = 97 - ch;
  15.                         System.out.println("x = "+x);//x = 0
  16.                         System.out.println(97 == ch);//true  可以看出char在内存中的存储实际是int型
  17.                        
  18.                 char[] chs = { 'a', 'b', 'c', 'd', 'b', 'e', 'f', };
  19.                 String str = String.valueOf(chs);//将字符数组转为字符转
  20.                 int num = str.indexOf('b');//调用indexOf()获取下表,没有返回-1
  21.                 System.out.println(num);
  22.                 System.out.println(search(chs, 'b'));
  23.                 System.out.println(search(chs, 'h'));
  24.                 System.out.println(str.indexOf('h'));
  25.         //        System.out.println(search(null, 'f'));
  26.         }
  27.         public static int search(char[] chs, char ch) {
  28.                 if (chs == null)
  29.                         throw new IllegalArgumentException("输入不能为null");
  30.                 for (int i = 0; i < chs.length; i++) {
  31.                         if (ch==chs[i])//如果这里想用equals(),需要将字符先转为字符串
  32.                                 return i;
  33.                 }
  34.                 return -1;
  35.         }
  36. }[code]
  37. 运行结果
  38. x = 0
  39. true
  40. 1
  41. 1
  42. -1
  43. -1
复制代码
[/code]
回复 使用道具 举报
  1. public class LianXi {
  2.         public static void main(String[] args) {
  3.                 char[] chs = { 'a', 'b', 'c', 'd', 'b', 'e', 'f'};
  4.                 String str = String.valueOf(chs);
  5.                 System.out.println(str);//abcdbef
  6.                 int num = search(str,'b');
  7.                 System.out.println(num);
  8.         }
  9.         public static int search(String str,char ch){
  10.                 String chr = String.valueOf(ch);
  11.                 if(str==null)
  12.                         throw new RuntimeException("判断不存在");
  13.                 if(str.contains(chr))
  14.                         return str.indexOf(chr);
  15.                 return -1;
  16.                 }
  17.         }
复制代码


对对。我忘了是基本数据类型了。当数组了。
我用contains做出来了,equals做不出来。应该是这里不能用。
回复 使用道具 举报
我把代码复制到我的eclipse上跑了,但是没有像楼主那样感觉出什么。
回复 使用道具 举报
好好好好好好好好好好好好好好好好好好好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马