我正在学习Java编程的第一学期,我们刚刚介绍了条件运算符(?:)条件。我有两个问题,它们似乎希望我在彼此之间“嵌套”条件运算符,我可以很容易地(但很乏味地)用if-else-if语句来做到这一点。1)"假设月份是一个整数变量,其值为1或2或3或5...或11或12。写一个表达式,其值为"jan"或"feb"或"mar"或"apr”或“may”或“jun”或“jul”或“aug”或“sep”或“oct”或“nov”或“dec”基于月的值。(因此,如果月的值是4然后表达式的值将是"apr".)."我的想法是这样的:(month==1)?"jan":(month==2)?"feb":(mo
这个问题在这里已经有了答案:Unexpectedtyperesultingfromtheternaryoperator(4个答案)关闭4年前。我在玩三元运算符时发现了一些奇怪的东西。我有以下代码:classMain{staticvoidfoo(inta){System.out.println("int");}staticvoidfoo(Stringa){System.out.println("String");}staticvoidfoo(Objecta){System.out.println("object");}publicstaticvoidmain(String[]args){
Checkstyle提示以下内容:return(null==a?a:newA());并说parent是不必要的。虽然声明在没有它们的情况下肯定能正常工作,但在有它们的情况下似乎更具可读性——否则当我阅读它时,我倾向于看到:returnnull先要停下来再考虑剩下的==a?a:newA();部分,因为我的大脑已经走了一条路。此外,每当我看到三元运算符时,我倾向于做同样的事情,除非它被分组在括号中。那么:围绕三元组的括号应该是事实上的标准吗?有什么理由不把它们放在那里吗? 最佳答案 嗯,checkstyle是对的,括号对执行没用。但是对
请演示三元运算符如何与常规if/elseblock一起使用。示例:BooleanisValueBig=value>100?true:false;完全重复:HowdoIusetheternaryoperator? 最佳答案 BooleanisValueBig=(value>100)?true:false;BooleanisValueBig;if(value>100){isValueBig=true;}else{isValueBig=false;} 关于c#-三元运算符如何工作?,我们在St
为什么将x设置为null就没问题:booleancondition1=false;Integerx=condition1?1:null;将x设置为2就可以了:booleancondition1=false,condition2=true;Integerx=condition1?1:condition2?2:null;但是,x应该设置为null会导致java.lang.NullPointerExceptionbooleancondition1=false,condition2=false;Integerx=condition1?1:condition2?2:null;一个解决方案是使用:
为什么下面这行代码会产生一个NullPointerException?Longv=1==2?Long.MAX_VALUE:(Long)null;我知道正在对null执行拆箱操作,但为什么呢?注意Longv=(Long)null;不产生异常。 最佳答案 所以看起来很明显,如果条件为真,你只需要装箱,如果条件为假,则不应该装箱。但是,三元运算符表达式必须具有特定的static类型。所以我们有Long和long。JLS声明结果将是原语(同样-假设运算符是+甚至是==)。所以三元运算符将强制拆箱,然后赋值才会导致装箱。如果您要用等效的if-
谁能告诉我为什么这不能编译?publicclassTestClass{privatebooleandoThis=false;protectedvoidfooThat(){}protectedvoidfooThis(){}publicvoidexecute(){(doThis?this::fooThis:this::fooThat).run();}} 最佳答案 你的意图很可能是(doThis?this::fooThis:(Runnable)(this::fooThat)).run();Java无法仅从方法名称中推断出您希望?:返回什么
我的一个学生在使用有时会导致null的三元运算符时遇到空指针异常。我想我理解这个问题,但它似乎是由不一致的类型推断引起的。或者换句话说,我觉得这里的语义不一致,在不改变他的方法的情况下应该可以避免错误。这个问题与Anotherquestionaboutternaryoperators相似,但不同。.在那个问题中,必须将nullInteger强制为int,因为函数的返回值是int。但是,在我的学生代码中情况并非如此。这段代码运行良好:Integerx=(5>7)?3:null;x的值为空。没有NPE。在这种情况下,编译器可以计算出三元运算符的结果需要是Integer,因此它将3(一个in
为什么这段代码有效?FloattestFloat=null;Floatf=true?null:0f;为什么会抛出异常?FloattestFloat=null;Floatf=true?testFloat:0f;但最奇怪的是,这段代码也运行成功,没有任何异常:FloattestFloat=null;Floatf=testFloat;Java的三元运算符似乎改变了行为。谁能解释一下这是为什么? 最佳答案 行为在JLS-ConditionalOperator中指定:Ifoneofthesecondandthirdoperandsisofpr
考虑这个表达式的用法:Stringhi=Optional.ofNullable(sayHi()).orElse("-");有效对应于这个三元表达式:Stringhi=sayHi()!=null?sayHi():"-";Optional.ofNullable与方法调用的这种用法是一种好的做法吗?或者只是额外冗长的编码?我认识到Optional.ofNullable实际上创建了一个变量并避免调用sayHi()方法两次。为了避免这个问题,您实际上可以创建一个额外的变量,但这会增加三元选项的冗长程度:Stringhi=sayHi();hi=hi!=null?hi:"-";另一方面,Option