除了'cast'之外,还有其他方法可以在Java和C++等静态类型语言中更改变量的类型吗?
我试图弄清楚动态和静态类型之间在实际上的主要区别是什么,并继续寻找非常学术性的定义.我想知道我的代码是什么意思.
确保您不会因强类型与弱键入而混淆静态与动态类型.
静态类型:每个变量,方法参数,返回类型等都具有在编译时已知的类型,无论是声明的还是推断的.
动态类型:在编译时忽略/不存在类型
强类型:运行时的每个对象都有一个特定的类型,您只能对它执行为该类型定义的操作.
弱类型:运行时对象要么没有显式类型,要么系统会尝试在必要时自动转换类型.
这两个对立面可以自由组合:
Java是静态和强类型的
C是静态和弱类型(指针算术!)
Ruby是动态且强类型的
JavaScript是动态和弱类型的
一般来说,静态类型意味着编译器捕获了许多错误,这些错误是动态类型语言中的运行时错误 - 但这也意味着您花费大量时间担心类型,在许多情况下不必要地(参见接口与鸭子)打字).
强类型意味着类型之间的任何转换必须是显式的,通过强制转换或通过使用转换方法(例如将字符串解析为整数).这意味着更多的打字工作,但具有让你控制事物的优势,而弱的打字通常会导致混乱,当系统做一些模糊的隐式转换,留下一个完全错误的变量值,导致破坏十个方法调用线.