如果Java是强类型的,那么为什么这个代码会编译?

时间:2015-11-27 13:46:00

标签: java types casting strong-typing weak-typing

我对强类型的理解是该语言不会进行隐式类型转换。但是,此代码将char转换为它的ascii值,然后使用该值。

static char x = 'j';
static int y = 7;

public static void main(String[] args){
    System.out.println(y+x);
}

4 个答案:

答案 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)

这与强弱打字无关。您的代码是两个强类型变量之间隐式转换的示例 - charint

您的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));