近日来很迷惑,在JAVA中括号用在表达式中和调用方法处,还有定义方法处。
这三处中哪一处算是运算符。查过积木死狗司令(JAVA之父)的<<java语法规范V3>>上面居然无运算符优先级,<<java core>>中运算符优先级表上第一列是" . (param) []" 这个(param) 是方法调用,看来是把调用方法处这个括号作为运算符了,这对吗?(我本人感觉是不对的) 表达式中的括号却在该表中未出现,看来是没有当成运算符了,这又对吗?
<<java core>>本是牛书,可是(JAVA之父)出的书也不敢小瞧,还有国内的教材书等,这些书我都把运算符优先级表对比了一下,一个比较令人生气的问题出现,那就是运算符优先级表不尽相同,虽大同小异,但细节之处各说各的。严谨的JAVA怎么能这样哪?唉。只请高人指教一下,到底括号用在何处算是运算符?

解决方案 »

  1.   

    我说一下经验。^_^
    1。(param)处的括号不是运算符,比如public void doSomething(int a,String b){},此处括号
    是用来囊括住方法或函数所需要用的参数。
    2。表达式中的括号是运算符,比如 int a =1;int b=2;int c=3;a=a*((b+c)-a);  这里的括号是运算符。当括号作为运算符时,优先级别是最高的。
    3。还有就是在if,for,while等语句中用到,也是运算符。比如:int a=5;int b=6;  if(a>b){}  此处括号就是运算符,先将a>b作运算,得到一个boolean值(true或false)。
      

  2.   

    括号不应该当成运算符的,只是()里面的东西优先级别高些罢了。
    lz没有必要过于去关注这些东西。lzmhehe(小飞飞) ( ) 信誉:100    Blog 
    说的对,多用几个()就ok了
      

  3.   

    当然是括号了,没有比括号更高级的了
    不过你也不会出现a.(b)这样的情况不是?你想如果是(A=B).methord();肯定是先将作()里面的运算
    至于它是不是运算符,我觉得没必要深究,反正多用几个(当然别用错)肯定没什么问题。可读性也高啊
      

  4.   


    引起操作的符号都是运算符。.  //属性寻址
    () //函数调用
    [] //下标操作三个都是。改变运算优先级的()可以不算在内。>>严谨的JAVA怎么能这样哪?
    不要随便归咎责任……>>那个.运算符和圆括号,哪个优先级更高一些,书上说都是1级的,大家认为呢?
    真无聊……
      

  5.   

    楼上的看来是个资深的程序員,回答的格式都很讲究.
    假设作为函数调用的()是运算符。而对于下面方法调用
    this.f();又是正确的.
    那么因为.和()都是1级,左结合性。则上面的便相当于
    (this.f)();
    而这又是编译报错的。看来跟this.f()不同.说明假设错误。
    说明函数调用的()不是运算符。
    不知上面的反证法对吗?还请高人指教。请楼上的指点迷津。:)
      

  6.   


    this.f();
    (this.f)();这两句肯定是不一样的。Java中方法不能作为独立的对象,this.f本身不是一个合法的表达式,加上扩号自然不对。不过这在有些语言里面是正确的,比如在Python中称为unbound method。在支持运算符重载的语言中就可以看到(典型如C++和Python),"()"、"[]"、"."(Python)/"->"(C++)都是可以重载的。
      

  7.   

    >>比如在Python中称为unbound method。
    是bound method。
      

  8.   

    >>会影响到运算速度,不过不大,^_^
    不会影响运算速度……