Java8-它会改变最后的String变量的结束位置吗



我找不到这个问题,很抱歉我的搜索技能错过了!

在Java 8之前,我相信诸如之类的声明

...
public final String someString = "Hi";
public final int someInt = 17;

最好声明为:

...
public static final String someString = "Hi";
public static final int someInt = 17;

与后PermGen(现在的Metaspace(还有区别吗?-XX:+UseStringDeduplication对这种差异有任何影响吗(无论如何对于字符串(?

包含对对象的引用的变量对被引用的对象没有影响。如果有,那就很奇怪了,因为可能有很多不同的变量引用了同一个对象。

换句话说,我假设,您已经知道所有具有相同内容的字符串文字都引用了相同的对象,所以如果您声明both

public final String someString1 = "Hi";
public static final String someString2 = "Hi";

CCD_ 2和CCD_。那么,如果变量的声明对对象产生了影响,那么哪一个应该与此相关?

您甚至可以使用完全没有变量的同一对象,例如

System.out.println("Hi");

声明变量static的原因要简单得多。它总是有相同的内容,所以没有理由为每个对象保留内存,只是为了总是从该常量中读取相同的引用。事实上,由于这样的声明是一个编译时常量,因此在运行时甚至不会读取它。

最新更新