请问java中调用方法传入参数为null时如何进行调用的

如图,当定义好了locked方法后,new出新的lock类对象test,调用locked方法时,如果方法定义中有locked(String type)时,test(null)调用该方法,打印出如下结果:

public class Lock {
    public void locked(String type){
        System.out.println("调用的是locked(Str)方法");
    }
    public void locked(int type){
        System.out.println("调用的是locked(int)方法");
    }
    public void locked(){
        System.out.println("调用的是locked()方法");
    }
    public static void main(String[] args){
        Lock test=new Lock();
        test.locked();
        test.locked(2);
        test.locked("2");
        test.locked(null);
    }
}

运行结果

调用的是locked()方法
调用的是locked(int)方法
调用的是lockedStr)方法
调用的是lockedStr)方法
进程已结束,退出代码0

但当我注释掉String方法后,如图,运行编译未通过。
修改后代码如下:

public class Lock {
    /**public void locked(String type){
        System.out.println("调用的是locked(Str)方法");
    }*/
    public void locked(int type){
        System.out.println("调用的是locked(int)方法");
    }
    public void locked(){
        System.out.println("调用的是locked()方法");
    }
    public static void main(String[] args){
        Lock test=new Lock();
        test.locked();
        test.locked(2);
        //test.locked("2");
        test.locked(null);
    }
}

运行结果及报错内容

java: 不兼容的类型: <nulltype>无法转换为int

请问是否代表null做参数的调用就是默认String类型的形参?如果用null作为参数调用的话是调用的那种形式的对应方法呢?希望各位不吝赐教

这时候你就要知道int和Integer的区别了。

1、Integer是int的包装类,int则是java的一种基本数据类型

2、Integer变量必须实例化后才能使用,而int变量不需要

3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 。

4、Integer的默认值是null,int的默认值是0。
public static void main(String[] args){

    Lock test=new Lock();

    test.locked();

    test.locked(2);

    //test.locked("2");

    //test.locked(null);
   test.locked(0);

}

就可以了

引用数据类型默认为空,传递null也就表示传递了一个空的字符串对象。
没有提供字符串类型的参数方法就会报错,因为int类型默认值是0,null不能转为int类型。

因为你只有一个locked(String type)可以传入null参数,传入null是必然是调用locked(String type),
locked()无参的传入null不会调用,locked(int type)方法int类型也是不能传入null的,所以注释掉locked(String type)之后会编译报错
如果多一个其他类型参数的locked(Object type),调用传参locked(null)时,也会编译报错,无法指定哪一个方法