我一直在浏览String.class文件(java.lang.String),我有几个问题。
该类的char[]声明为final,变量名为value。下面有一个构造函数,通过它设置char[]的值。
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}我的问题是:
1)如何通过构造函数设置最终变量的值?
第二,等量法。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}在此方法中,如果anObject是String的实例,则该方法将anotherString.value分配给char数组。但是,当我尝试执行String.value时,我会得到一个错误“值不可见”。我假设是因为它在String类中声明为私有,但是String类如何能够在String实例上使用anotherString.value呢?
发布于 2016-06-10 16:48:50
1)最终变量不需要在声明时初始化,但必须在使用之前初始化(指定值)一次。可以用任何一种方式,即只给最终实例变量赋值一次。( a)声明本身。b)实例初始化程序块。( c)建设者。
如果变量在声明期间被赋值,则Java编译器不允许在实例初始化器或构造器中重新分配。
如果在声明期间没有为实例变量赋值,那么Java编译器将允许在初始化器块中初始化值。在这种情况下,将不允许在构造函数中初始化。
如果在声明期间或在实例初始化程序块中未初始化值,则必须在Constructor中初始化值,否则将出现编译时错误,说明空白最终字段可能尚未初始化。
2)在类中,如果另一个对象是同一个类的实例,则可以访问另一个对象的私有成员变量。
https://stackoverflow.com/questions/37752237
复制相似问题