Tal*_*lam -2 java type-systems
虽然有很多与这个主题相关的问题,但不知何故我总觉得有些我不知道或说我对这些答案不满意,所以我在这里再次发布
Integer in=new Integer(4);
Character character=(Character) in; //Cannot cast from Integer to Character
String s="hello";
int j=(int) s;//Cannot Cast from string to int
char chi='a';
int l=(int)chi; //works
int i=0;
char ch=(char)i; //works
String b=(String)1+"hello";//cannot cast from int to string
Run Code Online (Sandbox Code Playgroud)
在第 2、第 4 和第 9 行中,它向我显示了注释错误,而我可以在注释行中进行int和char之间的转换 。
所以在我发布的代码中,编译器检查静态/动态行为并检查弱/强行为。
我相信这些问题的答案一定有很多,所以如果有的话,请发布链接,否则详细的解释将非常可观。
是什么让我困惑
您完全忽略了静态与动态的概念,我不知道您在问题中所说的强与弱是什么意思,因为您的问题似乎是关于基元与对象的。
静态与动态是关于方法绑定的,即确定在对象被子类化时调用对象的哪个方法。您的代码没有调用任何方法,因此静态与动态对您的问题毫无意义。
正如我所说,我不知道你所说的强与弱是什么意思。Java 有强引用和弱引用的概念,但这都是关于垃圾收集的,与您的问题无关。
您的问题似乎是关于 Primitives,它们是所有小写的类型:
byte, short, char, int, long, float, double, 和boolean。
忽略boolean,这是一个trueVSfalse值,这些都是数字值类型,即它们存储的数值,并且它们不是对象。
数字原始值可以相互分配,但如果分配可能导致值大小丢失(称为缩小原始转换),则必须进行强制转换。
对象是大小写混合的类型,例如Integer, Character,String等(用户对象类型可以是小写的,但这违反了命名标准)。
如果对象类型通过子类化相关,则可以相互分配对象类型,尽管向下转换时需要进行转换(称为缩小引用转换)。
对象和原语不能相互转换,除非涉及自动装箱和/或自动拆箱,例如intto/from Integer。
在问题末尾的 3 个问题中,如果将第三个问题改写为“为什么 Java 具有原始类型?”,那么只有第三个问题有意义。这里已经回答了:为什么人们仍然在 Java 中使用原始类型?,这里:为什么 Java 中有原始数据类型?.