java - 为什么 void 函数有返回值?

标签 java

我是一名编程初学者,我对函数的返回值有疑问。

我正在学习 Java。

我附上了我书中的代码,其中包含经典的选择排序。

现在显然书中的代码可以工作了。然而,主函数中的这三行是我的问题的基础:

  1. int []a=new int[]{1,9,2,8,3,7,4,6​​,5};

  2. 排序(a);

  3. if(ascending(a)) System.out.println("Works");

所以我的问题是:

在第 2 行中,如果 sort() 函数为 void,如何检索排序后的 a[]?

这行不应该是:a = sort(a)吗?

public class SelectionSort
{

    public static void main(String[]args)
    {
        int []a=new int[]{1,9,2,8,3,7,4,6,5};
        sort(a);
        if(ascending(a)) System.out.println("Virðist virka");
        else System.out.println("Virkarekki");
    }

    public static void sort(int[]a)
    {
        if(a.length<2) return;
        int i=0;
        while(i!=a.length)
        {
            int k=i+1;
            while(k!=a.length)
            {
                if(a[k]<a[i])
                {
                    int tmp=a[i];
                    a[i]=a[k];
                    a[k]=tmp;
                }
            k++;
            }
        i++;
        }
    }

    public static boolean ascending(int[]a)
    {
        if(a.length<2) return true;
        int i=1;
        while(i!=a.length)
        {
            if(a[i-1]>a[i]) return false;
            i++;
        }
        return true;
    }
}

最佳答案

由于数组是对象,因此它们是通过其引用(它们在内存中的位置)传递的,因此 sort()a[] 中的更改也会更改 a[] 在 main.c 中声明。所以 a 在函数内被改变。但是,你不能说

public static void change(int[] a) {
    a = new int[3];
    a = {1, 2};
}

这不会改变 a 本身,因为这只是创建参数 a 指向的新内存位置,而不更改参数。

关于java - 为什么 void 函数有返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394493/

相关文章:

java - Maven: Artifact 的权限被拒绝

java - 集成测试中Spring Boot的数据源自动配置问题

java - 反射:如何比较未知类型的两个对象

java - 为什么 Float.parseFloat() 同时抛出 NumberFormatException 和 NullPointerException 而 Integer.parseInt() 只抛出 NumberFormatException?

Java在与系统类加载器相关的子类加载器中动态加载类

java - 为什么 DEFAULT_NUM_DIRECT_ARENA 派生自 PlatformDependent.maxDirectMemory()?

java.lang.NullPointerException : Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference

java - 简单的应用程序无法在 Eclipse 中编译(带插件)?

java - 多接口(interface): instanceof cannot differentiate different interfaces

java - 在流中按条件抛出异常