java static类型的变量在类加载的时候初始化和函数中初始化有什么区别?

发布于 2022-09-06 00:35:54 字数 2350 浏览 9 评论 0

public class Solution {
    private static int count;
    public int InversePairs(int [] array) {
        **count=0;**
        if (array.length!=0)
        mergeSort(array,0,array.length-1);
        return count;
    }
    public void mergeSort(int[] array,int start,int end){
        if(start<end){
           int mid=(start+end)>>1;
           mergeSort(array,start,mid);
           mergeSort(array,mid+1,end);
           merge(array,start,mid,end);
        }
    }
    public void merge(int[] array,int start,int mid,int end){
        int i=start;
        int k=0;
        int j=mid+1;
        int[] temp=new int[end-start+1];
        while(i<=mid&&j<=end){
        if(array[i]<=array[j]){
           temp[k++]=array[i++];
        }
        else{
           temp[k++]=array[j++];
           count+=(mid-i+1);
           count%=1000000007;
        } 
        }
        while(i<=mid){
            temp[k++]=array[i++];
        }
        while(j<=end){
            temp[k++]=array[j++];
        }
        for(k=0;k<temp.length;k++){
            array[start+k]=temp[k];//将临时数组添加到原来的数组后边
        }
    }
}

差不多的代码如果是下面的这种写法就无法AC,好奇怪

public class Solution {
    private static int count=0;
    public int InversePairs(int [] array) {
        
        if (array.length!=0)
        mergeSort(array,0,array.length-1);
        return count;
    }
    public void mergeSort(int[] array,int start,int end){
        if(start<end){
           int mid=(start+end)>>1;
           mergeSort(array,start,mid);
           mergeSort(array,mid+1,end);
           merge(array,start,mid,end);
        }
    }
    public void merge(int[] array,int start,int mid,int end){
        int i=start;
        int k=0;
        int j=mid+1;
        int[] temp=new int[end-start+1];
        while(i<=mid&&j<=end){
        if(array[i]<=array[j]){
           temp[k++]=array[i++];
        }
        else{
           temp[k++]=array[j++];
           count+=(mid-i+1);
           count%=1000000007;
        } 
        }
        while(i<=mid){
            temp[k++]=array[i++];
        }
        while(j<=end){
            temp[k++]=array[j++];
        }
        for(k=0;k<temp.length;k++){
            array[start+k]=temp[k];//将临时数组添加到原来的数组后边
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苹果你个爱泡泡 2022-09-13 00:35:54

优先于函数,且无需调用

空名 2022-09-13 00:35:54

静态变量直接在声明处赋值相当于在static { ... } 块里赋值。
static {...}块在java字节码里会被编译成一个叫<clinit>的特殊静态方法,会在类加载时自动调用。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文