Tag: 条件运算符

为什么Java没有复合赋值版本的条件和条件或运算符? (&& =,|| =)

所以对于布尔型的二元运算符,Java有& , | , ^ , &&和|| 。 让我们总结一下他们在这里做的简要介绍: JLS 15.22.2布尔逻辑运算符&,^和| JLS 15.23有条件的和操作符&& JLS 15.24条件或运算符|| 对于& ,如果两个操作数值都为true ,则结果值为true ; 否则,结果是false 。 为| ,如果两个操作数的值均为false ,则结果值为false ; 否则,结果是true 。 对于^ ,如果操作数值不同,结果值为true ; 否则,结果是false 。 &&操作符就像&但是只有当其左侧操作数的值为true才会计算右侧的操作数。 || 运算符就像| 但是只有在其左手操作数的值为false时才计算其右手操作数。 现在,其中有5个有复合赋值版本,即|= , &=和^= 。 所以我的问题很明显:为什么Java不提供&&=和||=呢? 我发现我需要比我需要的&=和|= 。 我不认为“因为太长”是一个很好的答案,因为Java有>>>= 。 这个遗漏肯定有更好的理由。 从15.26分配操作员 : 有12个分配操作员; […] = *= /= %= += […]

为什么三元运算符意外地投出整数?

我已经看到它在某处讨论了下面的代码导致obj是一个Double ,但它从左侧打印200.0 。 Object obj = true ? new Integer(200) : new Double(0.0); System.out.println(obj); 结果:200.0 但是,如果在右侧放置不同的对象,例如BigDecimal ,则obj的types应该是Integer 。 Object obj = true ? new Integer(200) : new BigDecimal(0.0); System.out.println(obj); 结果:200 我认为这样做的原因是将左手边转换为double精度,就像integer / double精度比较和计算一样,但左右两边并不以这种方式相互作用。 为什么会发生?

C和C ++之间的条件运算符差异

我在某处读到C语言中的?:操作符在C ++中略有不同,有些源代码在两种语言中的工作方式都不相同。 不幸的是,我找不到任何地方的文本。 有谁知道这个区别是什么?

?:当一个expression式为空时的三元条件运算符行为

我正在编写一个控制台应用程序,试图通过反复试验来“猜测”一个数字,它运行良好,但是所有这些都让我不知道我写了些什么, 代码是: #include <stdio.h> #include <stdlib.h> int main() { int x,i,a,cc; for(;;){ scanf("%d",&x); a=50; i=100/a; for(cc=0;;cc++) { if(x<a) { printf("%d was too big\n",a); a=a-((100/(i<<=1))?:1); } else if (x>a) { printf("%d was too small\n",a); a=a+((100/(i<<=1))?:1); } else { printf("%d was the right number\n—————–%d———————\n",a,cc); break; } } } return 0; } 更具体地说,困惑我的部分是 a=a+((100/(i<<=1))?:1); //Code, code a=a-((100/(i<<=1))?:1); 我使用((100/(i<<=1))?:1)确保如果100/(i<<=1)返回0(或false),整个expression式将评估为1 […]

如何检查我的string是否等于null?

我只想执行一些操作,如果我的string有一个有意义的值。 所以,我试了这个。 if (!myString.equals("")) { doSomething } 和这个 if (!myString.equals(null)) { doSomething } 和这个 if ( (!myString.equals("")) && (!myString.equals(null))) { doSomething } 和这个 if ( (!myString.equals("")) && (myString!=null)) { doSomething } 和这个 if ( myString.length()>0) { doSomething } 而且在所有情况下,尽pipe我的string是空的,但我的程序还是做了一些事情。 它等于null 。 那么,那有什么问题呢? 添加: 我find了问题的原因。 variables被声明为一个string,因此,赋给这个variables的"null"被转换为"null" ! 所以, if (!myString.equals("null"))作品。

布尔,有条件的操作和自动装箱

为什么这会抛出NullPointerException public static void main(String[] args) throws Exception { Boolean b = true ? returnsNull() : false; // NPE on this line. System.out.println(b); } public static Boolean returnsNull() { return null; } 而这不是 public static void main(String[] args) throws Exception { Boolean b = true ? null : false; System.out.println(b); // null } ? 解决方法是通过Boolean.FALSEreplacefalse来避免null被解除boolean是不可能的。 […]

?:有条件运算符的可空types问题

有人可以解释为什么这在C#.NET 2.0中工作: Nullable<DateTime> foo; if (true) foo = null; else foo = new DateTime(0); …但是这不: Nullable<DateTime> foo; foo = true ? null : new DateTime(0); 后一种forms给我一个编译错误“无法确定条件expression式的types,因为在'<null>'和'System.DateTime'之间没有隐式转换。 不是说我不能使用前者,但是第二种风格与我的其他代码更一致。

什么是问号“?”和“冒号”:“操作员用于?

关于使用问号“?”的两个问题 和打印function括号内的冒号“:”运算符:它们做什么? 另外,有没有人知道他们的标准术语,或者我可以find更多关于他们的使用信息? 我读过,他们是类似于“如果”“其他”的声明。 int row = 10; int column; while (row >= 1) { column = 1; while(column <= 10) { System.out.print(row % 2 == 1 ? "<" : "\r>"); ++column; } –row; System.out.println(); }

我如何使用条件运算符?

我一直想知道如何用C ++兼容的语言编写"A ? B : C"语法。 我认为它的工作原理是:( 伪代码) If A > B C = A Else C = B 请问任何经验丰富的C ++程序员请帮助我吗?

带有Nullable <value>types的条件运算符赋值?

EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text) ? null : Convert.ToInt32(employeeNumberTextBox.Text), 我经常发现自己希望做这样的事情( EmployeeNumber是一个Nullable<int>因为它是列允许NULL值的LINQ到SQL的dbml对象的属性)。 不幸的是,编译器认为“虽然这两种types在赋值操作中都是有效的,但它们之间没有”null“和”int“之间的隐式转换。 由于需要在.Textstring上进行内联转换(如果它不为null),我可以看到空合并运算符不是一个选项。 据我所知,唯一的方法是使用if语句和/或分两步进行分配。 在这种特殊情况下,我觉得非常令人沮丧,因为我想使用对象初始值设置语法,而这个赋值就在初始化块中。 任何人都知道更优雅的解决scheme