理论:关于Java识别数组名称及其值

时间:2016-01-12 12:25:43

标签: java

我必须制作一个能够根据带数字的数组打印符号的程序,其数字对应于要打印的符号数量。

我让这个工作;这是代码:

class printChart {
  int[] values;

  void barChart(int[] values){
    for (int i=0;i<values.length;i++){
      int number = values[i];
      for (int j=0;j<number;j++){
        System.out.print("*");
      }
      System.out.println();
    }
  }

  void demo(){
    barChart(new int[] {2,5,0,4,3});
  }
  public static void main(String[] args){
    new printChart().demo();
  }
}

我的问题如下:Java如何知道{2,5,0,4,3}数组应该分配给变量值?我假设它是因为我设置void barChart来传递int[]值,但我想更多地了解内部工作原理以及正在发生的事情。

2 个答案:

答案 0 :(得分:1)

在Java中,一切都是按值传递,知道价值是什么也很重要。

此方法

void demo(){
    barChart(new int[] {2,5,0,4,3});
}

与此相同

void demo(){
    int[] arr = new int[] {2,5,0,4,3};
    barChart(arr);
}

在第一个中,创建了一个包含2,5,0,4,3值的新数组,其引用复制到参数values在barChart方法中。

在第二个中,创建了具有2,5,0,4,3值的新数组,并且引用复制到变量arr。然后在barChart方法中将arr引用到数组)的 复制到参数values

这就是它的工作原理以及为什么barChart方法知道这些值。

Łukasz也很好,第二行在你的程序中没有做任何事情,所以你可以改变这个:

class printChart {
  int[] values;

  void barChart(int[] values){

到这个

class printChart {

  void barChart(int[] values){

答案 1 :(得分:1)

我不太确定你的问题是什么,但是让我告诉你你做了什么。

您已经实现了名为void barChart(int[] value)的方法(功能) 要运行此方法,您必须将一维的Integer值数组传递给它。

现在是有趣的部分。

您已在代码行2中创建了一个类变量int[] values; 您还在方法void barChart(int[] value)中创建了lokal变量“ value ”。
你所做的就是所谓的黯然失色。方法“barChart()”仅使用在调用时传递给它的lokal值 你从未使用过一次类变量,因此可以删除它。

现在,如果你想使用类变量,你可以:
a)更改变量的名称(类或本地)
b)在方法“barChart”中写一个this.value而不仅仅是值。这将确保您使用的是类变量,而不是本地变量。