虽然有这么多的问题涉及到这个主题,但总觉得我不知道或说我不满意这些答案,所以我在这里发布再次变量的静态,动态,弱,强类型
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
在第二
,第4和第9行它让我看到评论错误,而我可以在它被注释掉工程线路使INT和焦炭之间的转换。
所以在我发布的代码中,编译器检查静态/动态行为以及检查弱/强行为的位置。
我相信这些问题肯定会有这么多答案可用,所以如果可以的话发布链接,否则详细的解释将非常可观。
是什么让我困惑
- 一些如何静态/动态和强/弱的外表一样给我
- 如何编译器知道何时检查静态/动态类型和时检查强/弱类型
- 这两种类型检查系统的必要性是什么。
'char'和'int'都是数字原语,这就是为什么这是可行的,因为'char'在内部被表示为一个无符号的8位数字,就像将一个long赋给一个double类型 – Moira
实际上并不存在两种类型检查 - 只是一些固定的数值转换,可能适用于某些情况。关于“编译器如何知道” - 呃,它知道,因为语言规范包含非常明确的规则:[第5章转换和上下文](https://docs.oracle.com/javase/specs/jls/ se8/html/jls-5.html) – Hulk
不能将对象转换为原始类型。 – Blasanka