我对强类型的理解是该语言不会进行隐式类型转换。但是,此代码将char转换为它的ascii值,然后使用该值。
static char x = 'j';
static int y = 7;
public static void main(String[] args){
System.out.println(y+x);
}
答案 0 :(得分:3)
Java是一种强类型编程语言,因为必须使用数据类型声明每个变量。变量不能在不知道它可以容纳的值范围的情况下从生命开始,一旦声明,变量的数据类型就不会改变。
示例:
允许以下声明,因为变量的“hasDataType”被声明为布尔数据类型:
boolean hasDataType;
在其余生中,hasDataType的值只能为true或false。
为什么char在你的例子中用数字转换。
System.out.println(y+x);
您可以查看此example
答案 1 :(得分:0)
这不是类型转换。
如果您查看PrintStream的javadoc,您会注意到函数println()
有多个版本。
正在发生的事情是,java会将您的呼叫与println(int x)
版本匹配,从而添加数字。
答案 2 :(得分:0)
这与强弱打字无关。您的代码是两个强类型变量之间隐式转换的示例 - char
和int
。
您的System.out.println(y+x)
实际上已编译为System.out.println(y+(int)x);
,因此会调用System.out.println(int arg0)
。
强制转换(int)x
是将字符转换为ascii值的原因,因为Java将字符存储为UTF-16值。
答案 3 :(得分:0)
如果Java是强类型的,那么为什么这个代码会编译?
因为JLS这样说。在这种情况下,我们是widening a primitive,char可以变成int。然后我们可以添加两个整数并输出结果。然后,如果需要,您可以将narrow int返回到char中。
System.out.println((char) (y+x));