Java如何安全?

时间:2013-10-22 10:58:15

标签: java pointers object

我知道Java不支持指针的概念,它实际上可以为您提供变量或对象的地址。但是在这种情况下你怎么说

A a1 = new A();    
System.out.println(a1);

这里a1是一个指向A类对象的引用变量。但是当我打印a1时,它会打印出对象的地址。

所以,我的意思是问我何时可以在Java中获取对象的地址(太完全合格的地址),它是如何安全的?

有人可以清楚我对Java的概念是安全的。提前谢谢。

5 个答案:

答案 0 :(得分:4)

Object.toString()打印的数字不是地址。它是 identitiy哈希码。这个号码可能来自地址,但您根本不知道如何或是否。

即使它是地址,你也无法使用它,因为你无法访问任意地址。

创建班级实例是否与安全相关的问题取决于您自己。如果是这样,必须采取措施以确保只允许的实体可以创建此类实例。

答案 1 :(得分:3)

实际打印的是“身份哈希码”,而不是地址(请参阅here)。即使它是地址,它也是一个只读信息,不能用于执行不安全的指针引用。

答案 2 :(得分:1)

  

但是当我打印a1时,它会打印出对象的地址。

不,它不会打印对象的地址。当您尝试打印对象时,将调用其toString方法,并且默认的toString方法输出将包含,类名和由@`分隔的对象的哈希码的无符号十六进制表示。符号

  

所以,我的意思是问我什么时候可以得到对象的地址(那也是   Java中的完全限定地址),它是如何安全的?

你永远不会得到对象的内存地址,你也无法操纵它。

答案 3 :(得分:1)

Java是安全的,除非您使用sun.misc.Unsafe。没有指定println(a1)打印的内容,它不必是地址。即使它是一个地址,你也没有合法的方式来阅读或使用它。

答案 4 :(得分:0)

对于你的第一个问题,我会请你阅读this并给你的大脑更多的负担来理解差异,

对于第二个,考虑到你是一个程序员,你可以通过不创建你正在讨论的对象生成方法来限制保持类的私有(首先)

第二,你可以提供一些方法,通过这些方法,用户只能访问他/她应该使用的类的部分(这也是你通过这样的方式编写的限制)

并且根据我的说法,我们应该担心代码的安全性,而不是平台的安全性。)