关于类型转换的问题String的,低级问题

Juweer_ni 2016-12-03 10:48:19
package Practice;
import java.util.HashMap;
import java.util.Map;
public class Demo09 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("曹操", "魏国");
map.put("刘备", "蜀国");
map.put("孙权", "吴国");
System.out.println(map);
System.out.println("-------------------");
map.remove("魏国");//只能是key,不能使value
System.out.println(map);
System.out.println("-------------------");
String str = (String) map.get("刘备");
}
}

问题就是,String str = (String) map.get("刘备");,我写的刘备明明是字符串类型,为什么这时候还是要强转为String类型.??不是很清楚
...全文
237 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bityourtail 2016-12-06
  • 打赏
  • 举报
回复
你可以查API,map.get("刘备")返回类型就是object,你当然得强转
webnonono 2016-12-06
  • 打赏
  • 举报
回复
加泛型,Map<String,String> map = new HashMap<>(); .这样,map才知道里面是String
bcsflilong 2016-12-06
  • 打赏
  • 举报
回复
Map<String,String> map = new HashMap<>();
nikyotensai 2016-12-06
  • 打赏
  • 举报
回复
引用 2 楼 m2200 的回复:
父类对象转换成子类对象是向下转型,需要强转,而object是所有类的基类。你没有声明value的类型,那么默认是object类型,在get的时候返回的是object类型,你用string接收就需要强转。
嘻哈愚者 2016-12-06
  • 打赏
  • 举报
回复
HashMap()支持泛型, 泛型就是你在定义集合的同时定义了集合中对象的类型, HashMap<String> map=new HashMap<String>(); 对象的类型不能是基本类型。 如果key和value都要求是String类型,还可以用Properties Properties:一种特殊形式的Map,key和value都只能是String
爱睡觉的阿狸 2016-12-03
  • 打赏
  • 举报
回复
父类对象转换成子类对象是向下转型,需要强转,而object是所有类的基类。你没有声明value的类型,那么默认是object类型,在get的时候返回的是object类型,你用string接收就需要强转。
萧乡月夜 2016-12-03
  • 打赏
  • 举报
回复
HashMap是支持泛型的:
public class HashMap<K,V> extends AbstractMap<K,V>
如果没有显示声明类型,那么就相当于使用Map<Object,Object> 这里声明就是没有显示声明类型,所以你的代码相当于new了一个HashMap<Object,Object>, 所以在取得value之后默认类型是Object,需要你手动转换成String类型。 如果想要不用每次都强制转换,可以将Map的声明改为:
Map<String,String> map = new HashMap<>();

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧