avatar
问一个java的基本问题# JobHunting - 待字闺中
h*m
1
static final变量的值不是不能改变的么?为啥我下面这个例子里面,数组a的值变了
呢?
public class testme {

static void change(int a[]){
a[0] = 5;
}
static final int a[] = {1, 2};

public static void main(String[] args) {
System.out.println("a = " + Arrays.toString(a));
change(a);
System.out.println("after change, a = " + Arrays.toString(a));
}
}
输出:
a = [1, 2]
after change, a = [5, 2]
avatar
p*2
2
a是final的,你并没有改变a。
avatar
d*e
3
a本身的值应该是没变的,但这个值不是指它里面的值。

【在 h********m 的大作中提到】
: static final变量的值不是不能改变的么?为啥我下面这个例子里面,数组a的值变了
: 呢?
: public class testme {
:
: static void change(int a[]){
: a[0] = 5;
: }
: static final int a[] = {1, 2};
:
: public static void main(String[] args) {

avatar
h*m
4
谢谢楼上两位的解释,看来我以前对final的理解有些误差。
avatar
c*o
5
Final actually means that the reference can not change, not the content.
If you define
static final int[] a = [1, 2]; // let's say here a is pointing at address
0xffff,
int[] b ={5, 6} // here b is pointing at 0xCCCC
a = b; // this will give you error directly, as a cannot point to any other
address.
but a = {5, 6} is fine, as you can modify the content.
I just do some modification of your example, you use methods which contain
the int[] params:
import java.util.Arrays;
public class FinalExample {

static final int a[] = {1, 2};

static void change(int[] a){
a[0] = 5;
}

static void changeFinalArr(int[] a) {
int b[] = {5, 6};
a = b;
System.out.println("inside the method: a = " + Arrays.toString(a));
}

public static void main(String[] args) {
change(a);
System.out.println("a = " + Arrays.toString(a));
changeFinalArr(a);
System.out.println("try to change a's reference: a = " + Arrays.
toString(a));
}
}
Output:
a = [5, 2]
inside the method: a = [5, 6]
try to change a's reference: a = [5, 2]
If you use methods without params:
static void changeFinalArr() {
int b[] = {5, 6};
a = b; // this statement won't be able to compile as it has error
System.out.println("inside the method: a = " + Arrays.toString(a));
}
Sorry that I cannot type chinese in my office. :)
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。