【问题标题】:final keyword preceding the parameter declaration in method declaration方法声明中参数声明之前的 final 关键字
【发布时间】:2013-02-25 12:16:53
【问题描述】:
class hello {
    public static void main(String arg[]){

    int[] c = { 2 };
    final int[] d = { 3 };

    }

static void useArgs(final int a, int b, final int[] c, int[] d) {

    c[0]=d[0]; // no error 
    c = d; //error 
    }
 }

任何人都可以解释这种行为吗?

【问题讨论】:

标签: java methods parameter-passing final


【解决方案1】:

变量c 是最终变量。这意味着您不能为该变量分配另一个值。

但是数组中的元素本身并不是最终的,这就是为什么你可以改变像c[0]=d[0]这样的元素的赋值。

【讨论】:

  • 请注意,数组(甚至是基元数组)是 Java 中的对象。对象是通过引用处理的,如果应用了“final”关键字,则只有对对象的引用是最终的,而不是对象的成员。
【解决方案2】:

c 是对整数数组的最终(常量)引用。并且由于 c 是最终的,因此您无法更改其值(即更改它所指的地址)。这适用于任何声明为 final 的变量(不仅仅是数组)。

这也行不通:

final int c = 1;
int d = 2;
c = 2; // Error
c = d; // Error

【讨论】:

  • 表示不能改变c的reference值但是数组的值可以改变?
  • c[0] != c 所以最终只适用于 c 本身而不是它的元素
  • @anonymous:在问题中,c 是一个reference。它的“价值”是一个地址。它指向一个数组对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多