Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java与类型安全_Java_Javascript_Type Safety - Fatal编程技术网

Java与类型安全

Java与类型安全,java,javascript,type-safety,Java,Javascript,Type Safety,在比较Java和JavaScript时,《MDN JavaScript指南》说明了以下内容: 例如,类型安全意味着不能将Java整数强制转换到对象引用中,也不能通过破坏Java字节码来访问私有内存 当然,关于上述语句的第一部分,当谈到类型时,类型安全的一般概念是围绕一种语言能力展开的,这种语言能够提供某种检查,消除与使用不兼容类型执行的操作有关的可能的错误条件(考虑到在Java中可以将primitiveint框到引用类型Integer,即使上面的示例很幼稚) 但是,声明的第二部分究竟是什么意思

在比较Java和JavaScript时,《MDN JavaScript指南》说明了以下内容:

例如,类型安全意味着不能将Java整数强制转换到对象引用中,也不能通过破坏Java字节码来访问私有内存

当然,关于上述语句的第一部分,当谈到类型时,类型安全的一般概念是围绕一种语言能力展开的,这种语言能够提供某种检查,消除与使用不兼容类型执行的操作有关的可能的错误条件(考虑到在Java中可以将primitive
int
框到引用类型
Integer
,即使上面的示例很幼稚)

但是,声明的第二部分究竟是什么意思

有人说JVM的验证器可以确保一定程度的内存保护,即“不能将任意位模式用作地址”


MDN语句的第二部分与类型安全性有什么关系?

这意味着在Java中,存在(原则上)无法回避如何识别类型。在javascript中,可以根据表示一段数据的字节序列的方式推断类型。在Java中,VM阻止这类事情,以确保打算作为Foo对象的字节序列不能被视为Bar对象

关于访问私有成员,这意味着您不能使一个字节序列表示与程序员预期不同的内容,以获得对非预期内容的访问。在运行时,您不能使用私有成员将类型为
foo
的对象
foobar
更改为类型为
Bar
的对象h相同的成员,但公开了
foobar

每个对象的类型都用字节码编码,字节码在运行时由VM控制。

我怀疑它们的意思是,不能像在C中那样将任意内存地址强制转换为不同的类型

struct bar_s {
    char foo_s[100];
}

void stuff() {
    int foo = 5;
    bar_s *bar = &foo;
}
如果语法错误,请原谅我,我的C已经生锈了。这会获取foo的内存地址,将其分配给指向bar_s结构的指针,然后您就可以轻松地取消引用。您正在将原本是int的内存区域视为bar_s

在C语言中,有许多攻击向量允许您用任意信息覆盖内存,并随后执行。请参阅

在java中,一旦是整数,就始终是整数[*]。所有数组上都有边界检查,这有助于防止缓冲区溢出

[*]在垃圾收集之前,即。

int到引用类型Integer,这只是编译器的“魔法”。在内部(字节码,jni),这些类型根本不兼容。