黑马程序员技术交流社区
标题:
关于集合类的一个小问题
[打印本页]
作者:
刘郑瑞
时间:
2013-1-17 19:45
标题:
关于集合类的一个小问题
public static void main(String[] a) {
List list = new ArrayList();
list.add("我");
list.add(2);
list.add("是");
list.add(5.5);
list.add("黑马");
list.add('d');//添加进去的也是int的类型数据吗?
list.add(null);
list.add(",哈哈?");
//list.remove('d');//出现错误,判断自动将char类型转换为int类型执行
for (Object o : list) {
if (o instanceof String) {
System.out.print(o);
} else {
continue;
}
}
list.remove((char)'d');//为什么这样还是不可以呢?
}
复制代码
作者:
ying
时间:
2013-1-17 20:17
java中的单引号表示的是字符数据类型,而双引号则表示的是字符串,你向List集合中存入的是字符串d,你删除的是字符d,然他们表现的都是一个字母d,但在java的世界里是不是的,在内存里储存的是不一样的,他们是两种截然不同的数据,java是一种强数据类型的一种语言,它不像PHP那样,单引号和双引号一样。
作者:
马金池
时间:
2013-1-17 20:32
单引号是字符型数据,双引号是字符串型的,字符型的在内存中是以ascii形式存储的,是因为这个才出现问题的吧
作者:
马金池
时间:
2013-1-17 20:32
马金池 发表于 2013-1-17 20:32
单引号是字符型数据,双引号是字符串型的,字符型的在内存中是以ascii形式存储的,是因为这个才出现问题的 ...
ps:楼主头像是我家峰么~
作者:
刘子义
时间:
2013-1-17 20:40
API中List的remove有两种重载方法remove(int)和remove(Object),前一种方法参数是移除的索引,第二种方法是移除与参数相同的元素,LZ传入的是基本类型的char数据,所以虚拟机自动将char型转换成int执行前一种方法,但是显然LZ想要执行的是后一种方法,所以应该把'd'转换成char对应的对象类,执行list.remove((Character)'d');
作者:
23559768
时间:
2013-1-17 20:55
}
System.out.println(list.get(5).getClass());
list.remove((Character)'d');//为什么这样还是不可以呢?
System.out.println(list.get(5));
}
看一下加进去的时候还被提升成才character对象· 但是我不知道为什么remove的时候会出现不确定性·
作者:
王溢君
时间:
2013-1-17 23:32
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
List集合 remove方法也没有字符参数,只有int参数,所以执行的是remove(100);肯定会报下标越界的错误
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2