为什么java需要类型标识符?

为什么java需要类型标识符?,java,Java,既然java中的每个类都是对象的一个子类,java中的变量本身不是对象,而是对象引用,那么当对象类型可以隐式化时,为什么java会强制进行类型规范?唯一必要的时间是使用简单数据类型。如果变量的类型为Object,编译器将不允许您将该变量用作任何其他类型(除非您强制转换它)。 这称为类型安全 例如: Object str = "abc"; s.toUpppercase(); //Compiler error Java是一种强类型语言。这些类型需要能够在编译时编译代码和验证类型兼容性 弱类型语

既然java中的每个类都是对象的一个子类,java中的变量本身不是对象,而是对象引用,那么当对象类型可以隐式化时,为什么java会强制进行类型规范?唯一必要的时间是使用简单数据类型。

如果变量的类型为
Object
,编译器将不允许您将该变量用作任何其他类型(除非您强制转换它)。
这称为类型安全

例如:

Object str = "abc";

s.toUpppercase();  //Compiler error

Java是一种强类型语言。这些类型需要能够在编译时编译代码和验证类型兼容性

弱类型语言没有类型。例如,当您在JavaScript中说
var x
时,您只需定义变量。然后可以在那里指定任何类型的值。这意味着,例如,如果您的代码有bug,您将字符串分配给该变量,然后尝试将该变量除以2(
y=x/2
),脚本将在运行时失败。Java不允许您编译这样的代码


有一个原则:缺陷在开发过程中花费x,在QA过程中花费x*10,如果到达生产阶段,则花费x*100。编译器和强类型语言允许减少到达QA的(愚蠢的)错误数量,从而使软件开发更容易、更快、更便宜

答案可能是Java是一种面向对象的语言,用于大型项目,由一家合理的公司创建。拥有如此强大的类型可以减少潜在的bug数量,您可以在编译级别上删除这些bug

顺便说一句。
在.NET产品中有
var x
。但它只能在方法体中局部使用。但这只是开发人员的一种编译器糖分。所以Java只是强类型语言的一个例子

嗯。Java之所以这么做是因为。。这就是语言的定义。 这可以归结为语言设计时(近20年前)被认为是良好的实践,并且具有编译器的易开发性

,一种与Java密切相关的语言(在同一JVM上运行),在大多数情况下不需要显式类型标识符。
缺点是scala编译器要慢得多(除此之外还有其他原因)。

我完全不明白你的意思。您是否可以发布一段您认为不需要“类型规范”的代码片段?要明确的是:您希望变量默认为
Object
,而不是类型推断?为什么这是可取的?对于
对象
,您不能做很多有用的事情。或者你想知道为什么java是静态类型而不是动态类型的吗?你能分享一些(假的)代码来解释你的意思吗?如果我们不知道对象的类型,我们如何使用对象的方法?@Likhit您不能对“非此即彼”或“非此即彼”的问题回答“是”。@CodeInChaos我以前的评论是在您编辑之前引用您的评论的。但不管怎样,我现在明白了,我把静态和动态打字搞混了。我会使用
静态
动态
打字<代码>强和
没有很好的定义,一些动态类型语言通常被称为强类型语言。甚至动态类型语言也有类型。例如,javascript中的值可以是字符串、对象、数字等。我明白了,但是Python如何实现这些变量(尽管据说是强类型的)?Python是动态类型的,java是静态类型的。有些人喜欢编译时类型检查静态类型,有些人喜欢动态类型的灵活性。