为什么String为final会使应用程序更安全?

问题描述 投票:0回答:2

一段时间以来,我试图了解String的工作原理,但我不了解安全性。

“如果String不是不可变的,这将导致严重的安全威胁,我的意思是某人可以访问他已授权的任何文件,然后可以有意或无意更改文件名并获得对该文件的访问权限由于不变性,您不必担心这种威胁,这个原因也与Java为何将String最终确定为Java,通过将java.lang.String最终确定为一致,Java设计者确保了没有人可以覆盖Java的任何行为。字符串类。“

https://javarevisited.blogspot.com/2010/10/why-string-is-immutable-or-final-in-java.html

String是不可变的,因此当我们尝试编辑时会创建新对象,并且String类型的变量具有新引用。如果我们可以交换引用,那么安全吗?有人可以做到这一点,但仍然可以访问他未经授权的内容。也许我对此理解不正确?

java string security
2个回答
0
投票

问题中涉及的不变性有两个不同方面。

这样的字符串是不可变的-这意味着每当对字符串进行更改时,都会在“内部”创建一个新对象:

String myString = "a"; // create a String "a", make myString reference it
myString = "b";        // a new String "b" is created. myString now references the new String
                       // since String "a" is no longer used, garbage collector will dispose of it

然而,将变量定为final意味着其值无法更改。继续前面的示例:

final String myString = "a"; // create a String "a", make myString reference it
myString = "b";              // will produce an error - myString cannot have its value changed

0
投票

final关键字提供建议。

String类未标记为final,以使程序更安全。之所以这样标记,是因为它是核心语言功能,因此程序员不要尝试对其进行编辑。除非您不喜欢向您提供Java的方式,否则对其进行编辑是没有意义的。

[如果有人坚持要修改任何类,并且如果您使用Reflection,则可以忽略final关键字。

© www.soinside.com 2019 - 2024. All rights reserved.