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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘郑瑞 中级黑马   /  2013-1-17 19:45  /  1996 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void main(String[] a) {
  2.                 List list = new ArrayList();
  3.                 list.add("我");
  4.                 list.add(2);
  5.                 list.add("是");
  6.                 list.add(5.5);
  7.                 list.add("黑马");
  8.                 list.add('d');//添加进去的也是int的类型数据吗?
  9.                 list.add(null);
  10.                 list.add(",哈哈?");
  11.                 //list.remove('d');//出现错误,判断自动将char类型转换为int类型执行
  12.                 for (Object o : list) {
  13.                         if (o instanceof String) {
  14.                                 System.out.print(o);
  15.                         } else {
  16.                                 continue;
  17.                         }
  18.                 }
  19.                 list.remove((char)'d');//为什么这样还是不可以呢?
  20.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

7 个回复

倒序浏览
java中的单引号表示的是字符数据类型,而双引号则表示的是字符串,你向List集合中存入的是字符串d,你删除的是字符d,然他们表现的都是一个字母d,但在java的世界里是不是的,在内存里储存的是不一样的,他们是两种截然不同的数据,java是一种强数据类型的一种语言,它不像PHP那样,单引号和双引号一样。
回复 使用道具 举报
单引号是字符型数据,双引号是字符串型的,字符型的在内存中是以ascii形式存储的,是因为这个才出现问题的吧
回复 使用道具 举报
马金池 发表于 2013-1-17 20:32
单引号是字符型数据,双引号是字符串型的,字符型的在内存中是以ascii形式存储的,是因为这个才出现问题的 ...

ps:楼主头像是我家峰么~
回复 使用道具 举报
API中List的remove有两种重载方法remove(int)和remove(Object),前一种方法参数是移除的索引,第二种方法是移除与参数相同的元素,LZ传入的是基本类型的char数据,所以虚拟机自动将char型转换成int执行前一种方法,但是显然LZ想要执行的是后一种方法,所以应该把'd'转换成char对应的对象类,执行list.remove((Character)'d');
回复 使用道具 举报
        }
        System.out.println(list.get(5).getClass());
        list.remove((Character)'d');//为什么这样还是不可以呢?
        System.out.println(list.get(5));
        
}
看一下加进去的时候还被提升成才character对象· 但是我不知道为什么remove的时候会出现不确定性·
回复 使用道具 举报
list.add('d');//添加进去的也是int的类型数据吗?add(Object obj),集合都是把东西按照对象存入。这里你存入的是什么,就是什么。

/list.remove('d');//出现错误,判断自动将char类型转换为int类型执行。。list里面有二个重载的方法:remove(int index) 移除此列表中指定位置上的元素。

list.remove((char)'d');//为什么这样还是不可以呢?‘d’本来就是char你再强转也没用啊,再说也没有参数是char的方法,你转成这样有啥用呢?建议你去查一下API,就明白了。
回复 使用道具 举报
梁俊 黑马帝 2013-1-17 23:34:22
8#
List集合 remove方法也没有字符参数,只有int参数,所以执行的是remove(100);肯定会报下标越界的错误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马