Java 将if语句转换为三元运算符-编译器抱怨它不是语句
错误消息在点上;这里需要一个语句,而三元表达式不是一个。java中的大多数东西要么是语句,要么是表达式;选择的几件事是:方法调用(包括“奇怪”的调用,如构造函数调用)、赋值(Java 将if语句转换为三元运算符-编译器抱怨它不是语句,java,if-statement,compiler-errors,conditional-operator,Java,If Statement,Compiler Errors,Conditional Operator,错误消息在点上;这里需要一个语句,而三元表达式不是一个。java中的大多数东西要么是语句,要么是表达式;选择的几件事是:方法调用(包括“奇怪”的调用,如构造函数调用)、赋值(a=5,以及a+=5),以及一元运算符,如a++) 我不知道你说的“高效”是什么意思。if语句与三元运算符一样,速度快、性能好 如果您的意思是更短,则不需要大括号: if(counter.compareAndExchange(100,0)==100)System.out.println(“跟踪”);else counter.
a=5
,以及a+=5
),以及一元运算符,如a++
)
我不知道你说的“高效”是什么意思。if语句与三元运算符一样,速度快、性能好
如果您的意思是更短,则不需要大括号:
if(counter.compareAndExchange(100,0)==100)System.out.println(“跟踪”);else counter.getAndIncrement()代码>–所有这些都适用于同一行,但是否符合您的风格偏好是您的决定
java中没有神奇的“允许我将任何和所有表达式视为语句”选项。错误消息是正确的;这里需要一个语句,而三元表达式不是一个。java中的大多数东西要么是语句,要么是表达式;选择的几件事是:方法调用(包括“奇怪”的调用,如构造函数调用)、赋值(a=5
,以及a+=5
),以及一元运算符,如a++
)
我不知道你说的“高效”是什么意思。if语句与三元运算符一样,速度快、性能好
如果您的意思是更短,则不需要大括号:
if(counter.compareAndExchange(100,0)==100)System.out.println(“跟踪”);else counter.getAndIncrement()代码>–所有这些都适用于同一行,但是否符合您的风格偏好是您的决定
java中没有神奇的“允许我将任何和所有表达式视为语句”选项。如果
生成语句,则三元运算符生成表达式。Java不允许在需要语句的地方使用表达式(也不生成语句)。换句话说,…?…
不能正确替换,如果(…)。。。否则…
在所有情况下。如果
生成语句,则三元运算符生成表达式。Java不允许在需要语句的地方使用表达式(也不生成语句)。换句话说,…?…
不能正确替换,如果(…)。。。else…
在所有情况下。“效率”,我的意思是是否可以在不使用AtomicInteger和CAS方法的情况下实现相同的逻辑。@VijayakumarChava好吧,你想实现什么?尝试这样做:
捕获(异常e){如果(计数==100){//每100次,以线程安全的方式记录。错误(e);}else{logger(e.getMessage();}}}最终,我以这种方式每一百次记录一次跟踪:`final private ThreadLocalRandom random=ThreadLocalRandom.current();@Test public void testTLR(){if(50==random.nextInt(100)){System.out.println(“跟踪”);}else{System.out.println(“no trace:”;}}}“Efficiency”,我的意思是,是否可以在不使用AtomicInteger和CAS方法的情况下实现相同的逻辑。@VijayakumarChava嗯,您试图实现什么?尝试这样做:
捕获(异常e){if(count==100){//每100次,以线程安全的方式logger.error(e);}else{logger(e.getMessage());}}最终,我以这种方式每100次记录一次跟踪:`final private ThreadLocalRandom random=ThreadLocalRandom.current();@Test public void testTLR(){if(50==random.nextInt(100)){System.out.println(“跟踪”);}其他{System.out.println(“无跟踪”);}
package com.myname.zed;
import org.junit.Test;
import java.util.concurrent.atomic.AtomicInteger;
public class MyTest
{
AtomicInteger counter = new AtomicInteger(100);
@Test
public void testAtomic()
{
for (int i = 1; i < 610; i++) {
if (counter.compareAndExchange(100, 0) == 100) {
System.out.println("trace");
}
else {
counter.getAndIncrement();
}
}
}
/* converted if to ternary, it is not compiling now */
@Test
public void testAtomic1()
{
for (int i = 1; i < 610; i++) {
counter.compareAndExchange(100, 0) == 100 ? System.out.println("trace") : counter.getAndIncrement();
}
}
}
final private ThreadLocalRandom random = ThreadLocalRandom.current();
@Test
public void testTLR()
{
if (50 == random.nextInt(100)) {
System.out.println("trace");
}
else {
System.out.println("no trace: ");
}
}