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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lichao 中级黑马   /  2013-12-15 21:17  /  1927 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. public class demo {
  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.                 char[] list=new char[]{'s','f','g','d','q','4','7','k'};
  5.                 char flag='s';
  6.                 String str=new String(list);
  7.                  System.out.println(str.indexOf(flag));
  8.                 System.out.println("............................");
  9.                 String str1=list.toString();
  10.                  System.out.println(str1.indexOf(flag));
  11.                         }
  12. }
复制代码

运行结果:

0
............................
-1
问题:list.toString和new String(list)不都是将字符数组转化为字符串吗?但是为什么他们的indoxOf返回的数值不同呢?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
lyn 中级黑马 2013-12-15 21:42:38
沙发
本帖最后由 lyn 于 2013-12-15 21:44 编辑

首先,list只是一个地址值,你第一次的确是将字符数组转化为了字符串,因此索引‘s’字符返回的是数组中的第0个位置。而你第二个只是将地址值转化为字符串,是地址值,索引‘s’字符当然返回-1咯

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

回复 使用道具 举报
{:soso_e109:}我也不明白呀,看了回答也不明白,为什么是-1呀??????
回复 使用道具 举报
本帖最后由 一年之后 于 2013-12-15 22:54 编辑

你打印一下str和str1 你就能看到  str:根据你数组内容构造的字符串
                                                  str1:是一个地址值
因为new String(list)的 时候 是返回一个分配一个新的 String,使其表示字符数组参数中当前包含的字符序列,你找那个s的坐标当然能找到,返回的是
0

你list.toString() 的 时候,因为list代表一个数组,数组是一个对象继承Object,但他没有重写toString()方法 ,所以调用的是Object里的toString()方法

而Object里的toString(),返回的是一个地址值。你找s的坐标,当然找不到。返回-1.

你弄混淆了的应该是你觉得list.toString() 是调用String类中重写Object类的toString()方法。


评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
lyn 发表于 2013-12-15 21:42
首先,list只是一个地址值,你第一次的确是将字符数组转化为了字符串,因此索引‘s’字符返回的是数组中的 ...

我有改了一下代码
  1. public class demo {
  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.                 char[] list=new char[]{'s','f','g','d','q','4','7','k'};
  5.                 char flag='s';
  6.                 String str=new String(list);
  7.                  System.out.println(str.indexOf(flag));
  8.                  System.out.println(str);
  9.                 System.out.println("............................");
  10.                 String str1=list.toString();
  11.                  System.out.println(str1.indexOf(flag));
  12.                  System.out.println(str1);
  13.                         }
  14. }
复制代码

运行结果:
0
sfgdq47k
............................
-1
[C@18a992f
确实是,那么数组的toString方法有啥意义呀?
回复 使用道具 举报
一年之后 发表于 2013-12-15 22:51
你打印一下str和str1 你就能看到  str:根据你数组内容构造的字符串
                                     ...

哦,明白了。谢谢,说的非常详细。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马