2016-11-16 11 views
-1

在Java中,您必须指定变量必须是哪种类型。Java如何检查分配的值是否正确(关于类型)?

然后确保不能为变量分配不同类型的值。 尝试分配不同的值会导致错误:例如,“字符串不能转换为int。”。

检查工作如何?

哪里有关于变量类型的信息存储?

在像JavaScript这样的弱类型语言中,将字符串分配给当前编号将不会导致错误

它是如何工作的?

据我所知,确定类型值的方式存储在内存中? 因此:一个变量如何在弱类型语言中改变它?存储的方式不再匹配。

+0

也许谷歌更多? https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html – TungstenX

+0

@Kayaman:变量*和*对象都不能在Java中改变它的类型 - 但这些是独立的东西。 –

+0

@JonSkeet事实上,这有点糟糕。 – Kayaman

回答

1

Java经历了一个编译过程。在此过程中,编译器验证变量的类型是否一致。 JavaScript不是一种编译语言。没有运行前流程来验证变量的类型。更重要的是,JavaScript是一种动态类型语言,因此通过设计,您不必担心变量的类型。 您可以在这里阅读更多关于它的信息: Dynamic type languages versus static type languages

1

有两个方面 - 编译时和运行时检查。

编译代码时,可以检查是否有明显不正确的赋值。编译器可以访问源和所有关于你为每个变量声明的类型的信息,所以这很简单。

还有其他一些需要在运行时检查的情况,例如当您尝试将变量转换为其他类型时。基本上,Java运行时存储一些标题/元数据以及每个对象,其中包括有关它的类的信息。这个元数据的具体内容和结构可以在不同版本的Java之间有所不同。但是在任何情况下,都可以检查这些信息,如果您试图创建的强制类型无效,则会抛出ClassCastException。

1

Java是一种严格类型的语言,我们需要确定变量的类型,它可以是int,float或引用类型(如Object,String,其他类),这样可以使实现简单易懂。然而,Java提供了类型转换的概念,因为我们可以将一个变量转换为另一个符合条件的类型,并且还提供了像parseInt()这样的包装器。例如

Object o = "Something"; 
String s = (String) o; 

由于其严格的类型性质的Java编译器不允许我们一个值分配给不同类型的变量。

每个Java对象都存储一个klass命名标志来引用它的Class级别对象。

相关问题