无法理清阵列的更新方式

时间:2016-05-18 06:34:42

标签: java arrays for-loop multidimensional-array

嗨我从某个人那里获得了这个工作代码,它的工作正常,我发现这个特定的代码正在更新temp [] []的值。但是我无法想象我们在temp [i] [j] =更新的地方是如何运作的。 因为该方法没有返回任何东西,并且没有赋值给temp [] []。我看到的只是update_table [] [] = temp;

当我尝试在循环之前和循环之后打印temp时,数组中会发生变化。

void var_init(String to_match_x,String to_match_y, String to_replace_x, String to_replace_y,String[][] temp)
{
    String t_match_x=to_match_x;
    String t_replace_x=to_replace_x;
    String t_match_y=to_match_y;
    String t_replace_y=to_replace_y;
    //String str=string;
    //add function to count variables find duplicates and assign values to them
    line();
    System.out.println("text to match:"+t_match_x);
    System.out.println("text to replace with:"+t_replace_x);
    System.out.println("text to match:"+t_match_y);
    System.out.println("text to replace with:"+t_replace_y);

    String[][] table_update=temp;
    line();

    System.out.println("starting fetching rules for updating variable");
    line();

    for(int i=0;i<table_update.length;i++)
        for(int j=0;j<table_update[0].length;j++)
            {
                 String replace_text=table_update[i][j];
                 System.out.println(replace_text);
                 String new_str;
                 new_str=replace_text.replaceAll("\\"+t_match_y,t_replace_y);         
                 new_str=new_str.replaceAll("\\"+t_match_x,t_replace_x);
                 table_update[i][j]=new_str;
                 System.out.println(table_update[i][j]);
                 line();

            }
}

2 个答案:

答案 0 :(得分:0)

你正在考虑一个名为temp

的数组
String[][] table_update=temp;

更新后table_update数组temp也会更新。如果您不希望这样做,请复制temp这样的数组

String[][] table_update = temp.clone();

答案 1 :(得分:0)

  String[][] table_update=temp;

这意味着table_update和temp都具有相同的引用,因此实际上它们都是相同的数组,如果其中一个更新,则预期另一个也要更新。 您可以创建一个新的数组(temp)并将table_update克隆到它,以解决您的问题。