我试图在试图击落对象后从对象中获取第一个字符,但是我的代码似乎缺少我不知道有什么问题的东西。
String name = "Mike";
如果我尝试使用上述代码,它可以正常工作。
name.charAt(0);
给我们" M"。对吗?
我试图降低(不确定这是正确的术语(,对象说:
Object obj = (String) name;
obj ==> "Mike"; // is what we get
,但是如果我使用该方法:
obj.charAt(0);
我期望相同的结果" m",但它给了我一个错误。我想念什么吗?
您的问题是,通过将String name
分配给Object obj
您隐藏obj
引用的任何内容是String
。
当然,您可以使用
将obj
铸造为String
(String)obj
因为基础引用是对String
类型对象的引用。
您必须考虑,因为obj
是Object
,它可能是您的语言支持的任何类型(是Java吗?(,所以这就是为什么您在执行obj.chatAt(0)
时会遇到错误。
如果基本参考是例如,您期望它会返回什么整数?
这就是为什么要使用charAt()
,您必须将其扔回String
String str = (String)obj;
char ch = str.charAt(0);
或更简单:
char ch = ((String)obj).charAt(0);
请记住,如果obj
的参考同时更改为例如一些整数,您不会成功地施放其他错误/异常。
P.S。示例代码假设您的语言使用char
作为包含单个字符的类型。
obj是 Object
而不是 String
,因此它没有charAt()
方法。如果您已经知道您的对象是字符串类型,则可以将其施放((String) obj).charAt(0)
,也可以使用:obj.toString().charAt(0)
好, casting 表示将一种特定类型的对象和将其变成另一个对象类型。
降低是指将对象施加到更特定的对象类型中。例如:
Object obj = "This is an object";
String s = (String)obj;
现在,您可以 Indoke String中的方法 String s
对象上的类。但不是相反。因此,您无法调用直接在的实例上类对象。
直接在Object obj
上使用上述示例中的方法charAt(int index)
,您需要首先要 downcast 首先您可以继续:
((String)obj).charAt(0); // it will give "T";
此外,如果我这样做:
obj.charAt(0);
当我尝试编译时,它给了我这个错误:
The method charAt(int) is undefined for the type Object
基本上意味着Object
类中不存在该方法。