java中的一元运算符后缀和前缀同时使用
我用简单的英语提出的问题是:java中的一元运算符后缀和前缀同时使用,java,prefix,unary-operator,postfix-operator,Java,Prefix,Unary Operator,Postfix Operator,我用简单的英语提出的问题是:someObject.methodReturnsInteger().getClass()(我不是说getClass方法,只是一个处理整数的方法。我也不是说一个专门返回整数的方法。)但这不是++a++ 换句话说,为什么(或如何)解析(或标记化)允许在第一个中使用返回值,而在第二个中不允许?我的意思是,它不应该这样解析后者:(++a)+++并使用++a的返回作为一个数字吗 这同样适用于以下情况:a+b 我希望这个问题足够清楚 谢谢您的时间。存储值的操作需要一个放置位置。不
someObject.methodReturnsInteger().getClass()
(我不是说getClass
方法,只是一个处理整数的方法。我也不是说一个专门返回整数的方法。)但这不是++a++
换句话说,为什么(或如何)解析(或标记化)允许在第一个中使用返回值,而在第二个中不允许?我的意思是,它不应该这样解析后者:(++a)+++
并使用++a
的返回作为一个数字吗
这同样适用于以下情况:a+b
我希望这个问题足够清楚
谢谢您的时间。存储值的操作需要一个放置位置。不能说(a*2)+
,因为表达式(a*2)
返回一个临时结果。增加它将没有效果,因为临时结果将立即被丢弃。出于同样的原因,你不能说(a*2)=10
说++(a*2)
可能更有意义,但这仍然表明,当您没有有效的位置放置增量值时,您希望存储增量值,因此语言设计者宁愿您编写(a*2)+1
“修复后”和“修复前”增量运算符也会返回临时结果,这就是为什么不能将它们应用两次或组合使用。运算符对数字不起作用,对变量起作用<允许使用code>x++,因为
x
是一个变量。类似于++(x++)
的内容是不允许的,因为(x++)
的结果是一个数字而不是一个变量。表达式++a++
由3个部分组成,通过添加括号突出显示:(++(a))++
:
变量参考a
前缀增量运算符()++X
Postfix增量运算符()X++
++a
起作用,因为a
是一个变量,但结果是一个值,所以(++a)+
不起作用
a+++b
不起作用,因为编译器将其解析为((a++++)++b
),正如我们刚刚了解到的,X++
需要一个变量
它是这样解析的,因为Java标记器将使用尽可能多的连续字符来形成有效的运算符
现在,如果您添加空格或括号,它可以工作,这取决于您希望该表达式执行的操作。以下都是相同的:
(a++)+(++b)
a+++(++b)
a++ + ++b
a+++ ++b
表达式
someObject.methodReturnsInteger().getClass()
称为“”
这是因为
是一个左关联运算符,
左侧的值必须是一个对象(或静态方法调用的类,但让我们跳过它)
因此表达式的解析方式如下:(someObject.methodReturnsInteger())。getClass()
第一个
之所以有效,是因为someObject
是一个对象。第二个
有效,因为括号中表达式的结果是一个对象
方法链接非常常见,并且在使用
@SotiriosDelimanolis,在转换为
整数
引用之前,它是一个int
——一个32位整数。这是不是对象的基元类型。在许多情况下,Java会自动将int
s与Integer
对象进行转换,主要是为了使泛型类更好地工作。看:@SotiriosDelimanolis,啊,真的。我没有试过其他的含蓄演员。我将删除答案的这一部分
String s = new StringBuilder()
.append("Hello ")
.append(person.getFirstName())
.append(", please say hello to your father, ")
.append(person.getFather().getFirstName())
.append(".")
.toString();