“;使用Classname.staticMethod”调用静态方法&“;使用Classname::staticMethod”调用;在java8中

“;使用Classname.staticMethod”调用静态方法&“;使用Classname::staticMethod”调用;在java8中,java,method-reference,Java,Method Reference,java中“使用Classname.staticMethod调用静态方法”和“使用Classname::staticMethod调用静态方法”之间有什么区别吗 java中的“使用Object.method调用方法”和“使用Object::method调用方法”之间是否有区别?Classname::staticMethod或Object::method语法用于使用者操作是使用者操作表示,其中编译器确保方法接受给定类型作为输入类型 虽然class.method或object.method是常规的方法

java中“使用Classname.staticMethod调用静态方法”和“使用Classname::staticMethod调用静态方法”之间有什么区别吗


java中的“使用Object.method调用方法”和“使用Object::method调用方法”之间是否有区别?

Classname::staticMethod或Object::method语法用于使用者操作是使用者操作表示,其中编译器确保方法接受给定类型作为输入类型
虽然class.method或object.method是常规的方法调用:)

使用::表示方法引用,并且可以在需要
@functioninterface
的任何地方使用它们。例如
消费者
s、
功能
s、
谓词
s、
供应商
s等。。。。很多Java8特性。 例如,如果方法需要通过
供应商提供的字符串

在“MyClass”中

然后你可以:

int value = methodUsingSupplier(MyClass::strProvider);
作为传递
strProvider
方法作为
方法的“参考”的一种方式,使用供应商
方法,然后供应商可以使用它


正如前面在其他答案中所说,编译器确保类型和参数匹配

您可以使用这两种方法来调用一个方法,并且该方法将以相同的方式运行。但是,对于这两种情况,您需要不同的语法。在第一种方法中,您“直接”调用该方法来运行其代码。在第二种方法中,使用对方法的引用,并将方法参数(如果有)应用于在引用上定义的方法,以实际运行代码。这对静态方法和实例方法都有效

public static void staticMethodExample() {
    double d = 1.23;
    double d2 = 4.56;

    int x = Double.compare(d, d2);           // -1

    Comparator<Double> c = Double::compare;
    int y = c.compare(d, d2);                // -1
}


public static void instanceMethodExample() {
    Double d = 1.23;
    Double d2 = 4.56;

    int x = d.compareTo(d2);               // -1

    DoubleToIntFunction c = d::compareTo;
    int y = c.applyAsInt(d2);              // -1
}
publicstaticvoid staticMethodExample(){
双d=1.23;
双d2=4.56;
int x=Double。比较(d,d2);/-1
比较器c=Double::compare;
int y=c.比较(d,d2);/-1
}
公共静态void instanceMethodExample(){
双d=1.23;
双d2=4.56;
int x=d.与(d2)比较;//-1
DoubleToIntFunction c=d::compareTo;
int y=c.applyAsInt(d2);/-1
}

Classname::staticMethod
不调用该方法,因此您的问题基于错误的假设
Classname::staticMethod
返回对该方法的方法引用。
int value = methodUsingSupplier(MyClass::strProvider);
public static void staticMethodExample() {
    double d = 1.23;
    double d2 = 4.56;

    int x = Double.compare(d, d2);           // -1

    Comparator<Double> c = Double::compare;
    int y = c.compare(d, d2);                // -1
}


public static void instanceMethodExample() {
    Double d = 1.23;
    Double d2 = 4.56;

    int x = d.compareTo(d2);               // -1

    DoubleToIntFunction c = d::compareTo;
    int y = c.applyAsInt(d2);              // -1
}