是个 '.' 成员访问被认为是Java中的运算符?

jbr*_*aud 9 java operators

在Java中,我可以使用.以下示例中的main方法的第二行中看到的类的公共成员(为了这个示例,忽略我对封装的不良使用).

public class Test {
    public static void main(String[] args) {
        Position p = new Position(0,0);
        int a = p.x; // example of member access
    }
}

class Position {
    public int x;
    public int y;

    public Position(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
Run Code Online (Sandbox Code Playgroud)

.考虑Java编程语言中的操作,就如同*,~!=被认为是运营商?


编辑 - 扩展上面的示例:

正如已经指出的那样,似乎Java语言规范认为.是分隔符而不是运算符.然而,我想指出的是,.展示一些似乎更像是操作者的行为.考虑上面的示例扩展到以下内容:

public class Test {
    public static void main(String[] args) {
        Position p = new Position(0,0);
        int a = p . x; // a -> 0
        int x = 1;
        int b = p . x + x; // b -> 1
    }
}

class Position {
    public int x;
    public int y;

    public Position(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
Run Code Online (Sandbox Code Playgroud)

很明显,正在强制执行某些优先级,以便在添加之前评估成员访问权限.这看起来很直观,因为如果要首先评估添加,那么我们会有p.2无意义的.然而,很明显,.其他分离者没有表现出行为.

Ted*_*opp 15

它被认为是分隔符,而不是运算符.有关所有分隔符和运算符的列表,请参阅Java语言规范部分3.11和3.12.

  • @Treebranch - 标识符可以是合格的(例如,`this.x`)或不合格(例如,`x`).限定符是标识符的一部分.那个(而不是运算符优先级)是你的第二个例子中发生的事情.换一种方式来说明一下:从JLS描述来看,很明显`this.(px)`永远不会有效,无论`p`的类型如何.令牌"." 只是不像运营商那样工作. (2认同)