Java按值传递真的有用吗?

时间:2016-04-04 14:32:36

标签: java arrays sorting pass-by-value

我有疑问。 我正在学习Java,我看到了一个我不理解的行为。 我通过值读取java,并且当你将它发送给方法时,原始变量不应该改变它的值(或者到目前为止我理解的那样)。

所以,我将在这里添加两个在我看来非常相似的案例。 首先,变量不会改变其值。 第二种情况,变量改变了它的价值。

第一种情况(变量保持不变):

package Chapter10.Part6;

import java.util.Scanner;


// Important: Pass by Value!

public class Chap10Part6 {

    public static void main(String[] args) {
        Scanner input = new Scanner (System.in);
        int number;

        System.out.print("Enter a Interger: ");
        number = input.nextInt();

        System.out.println("Number squared: " + square(number));
        System.out.println("Original Number: " + number);


        input.close();

    }


    static int square(int num){
        num = num * num;
        System.out.println("Number in square method: " + num);
        return num;


    }
}

第二种情况(变量更改):

package Chapter15.Part4;

import Chapter15.FunctionsPart1;

public class Chap15Part4 {

    public static void main(String[] args) {

        final int rows = 10;
        final int columns = 5;
        int [][] table = new int[rows][columns];

        FunctionsPart1.build2DArray(table, rows, columns);
        FunctionsPart1.display2DArray(table, rows, columns);


        System.out.println("");
        FunctionsPart1.organize2DArray(table, rows, columns);
        FunctionsPart1.display2DArray(table, rows, columns);
   }
}



package Chapter15;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class FunctionsPart1 {


    public static void build2DArray(int[][] arr, int rows, int columns){
        Random rand = new Random(System.currentTimeMillis());
        for (int i = 0; i < rows; i++){
            for (int j = 0; j < columns; j++){
                arr[i][j] = rand.nextInt(101);
            }
        }
    }


    public static void display2DArray(int[][] arr, int rows, int columns){
        for (int i = 0; i < rows; i++){
            for (int j = 0; j < columns; j++){
                System.out.print(arr[i][j] + " ");
                if((j+1)%columns == 0)
                    System.out.println("");
            }
        }
    }


    public static void organize2DArray(int[][] table, int rows, int columns){
        int t = 0;
        for(int x = 0; x < rows; x++)
        {
            for(int y = 0; y < columns; y++)
            {
                for(int i = 0; i < rows; i++)
                {
                    for(int j = 0; j < columns; j++)
                    {
                        if(table[i][j] > table[x][y])
                        {
                            t = table[x][y];
                            table[x][y] = table[i][j];
                            table[i][j] = t;
                        }
                    }
                }
            }
        }
    }


}

有人能解释我为什么吗?

感谢您的时间。

0 个答案:

没有答案