草庐IT

数学运算

全部标签

java - 三元运算符

为什么以下代码的输出是9.0而不是9?如果三元运算符只是if-else分支的缩写形式,那么为什么java编译器将int提升为double?publicclassTernary{publicstaticvoidmain(Stringargs[]){inta=5;System.out.println("Valueis-"+((a 最佳答案 Ifternaryoperatorisnothingbutshortformofif-elsebranchthenwhyjavacompilerispromotinginttodouble?条件表达式

java - Java 中的移位运算符

这个问题在这里已经有了答案:WhydoesJavamaskshiftoperandswith0x1F?(2个答案)关闭9年前。移位运算符如何当移位位的值大于数据类型的总位数时是否有效?例如,inti=2;intj=i整数的大小是32位,但我们要移动34位。这是如何工作的?

java - "+="运算符和 int 长用法

这个问题在这里已经有了答案:Whydon'tJava's+=,-=,*=,/=compoundassignmentoperatorsrequirecasting?(11个答案)关闭7年前。inta=1L;这不会编译(当然)。不兼容的类型:从long到int的可能有损转换intb=0;b+=Long.MAX_VALUE;这确实可以编译!但为什么允许呢?

java - Groovy == 运算符未达到 Java equals(o) 方法 - 这怎么可能?

我有以下Java类:importorg.apache.commons.lang3.builder.EqualsBuilder;publicclassAnimal{privatefinalStringname;privatefinalintnumLegs;publicAnimal(Stringname,intnumLegs){this.name=name;this.numLegs=numLegs;}@Overridepublicbooleanequals(Objecto){if(this==o){returntrue;}if(o==null||getClass()!=o.getClass

java - 数学与 J/链接 : Memory Constraints?

我正在使用Mathematica及其J/LinkJava接口(interface)进行计算密集型基准测试。如果达到大约320MB的内存占用量,基准测试就会停止,因为这似乎是极限,垃圾收集器需要越来越多的时间并最终会失败。Mathematica函数ReinstallJava采用参数命令行。我试着做ReinstallJava[CommandLine->"java-Xmx2000m..."]但是Mathematica似乎完全忽略了-Xmx选项。如何为我的java程序设置-Xmx内存选项?320MB的限制从何而来?任何帮助将不胜感激。 最佳答案

java - 为什么在 Java 中有两个 Right Shift 运算符而只有一个 Left Shift 运算符?

我是java新手,后来知道java中有两个右移运算符>>和>>>,但只有一个左移运算符.为什么会这样? 最佳答案 因为逻辑和算术左移操作是相同的(fromwikipedia)。ArithmeticshiftLogicalshift请注意在两次左移位中符号位(最左边的位)发生了什么。 关于java-为什么在Java中有两个RightShift运算符而只有一个LeftShift运算符?,我们在StackOverflow上找到一个类似的问题: https://sta

java - 编译器会优化重复的数学计算吗?

Java编译器是否会优化简单的重复数学运算,例如:if(prevX/width!=curX/width){//DosomethingwithprevX/widthvalue}else{//DosomethingwithcurX/widthvalue}我知道我可以在if语句之前将结果分配给变量,然后返回变量,但这有点麻烦。如果编译器自动识别正在进行相同的计算并自行将结果缓存到临时变量,我宁愿坚持上述约定。*编辑-我是个白痴。我试图简单/抽象我的问题太多。它并不简单:if(x>y) 最佳答案 答案是肯定的。这叫做CommonSubexp

带有 + 运算符的 Java 字符串连接

我对字符串连接感到困惑。Strings1=20+30+"abc"+(10+10);Strings2=20+30+"abc"+10+10;System.out.println(s1);System.out.println(s2);输出是:50abc2050abc1010我想知道为什么20+30在两种情况下都加在一起,但是10+10需要括号才能添加(s1)而不是连接到字符串(s2)。请在此处解释字符串运算符+的工作原理。 最佳答案 加法是左结合的。以第一种情况为例20+30+"abc"+(10+10)------------50+"ab

Java 按位运算

我有这行代码intb1=0xffff&(content[12]我有一个小字节序的bytearray(content[]),需要重新创建一个2字节的值。这段代码很好地完成了工作,但在测试之前我是这样写的intb1=0xffff&(content[12]结果不对。我的问题是为什么在这种情况下需要0xff? 最佳答案 0xff是必要的,因为有两个因素:Java中的所有整数类型都是有符号的所有按位运算符都将其参数提升为int(或long,如有必要)在行动之前。结果是如果content[11]的高位被设置,它将被符号扩展为负数int值(val

java - 运算符 < 未定义参数 Number, int

我是不是太聪明了?privatestaticLongextractLong(Tvalue){if(valueLong.MAX_VALUE){//产生编译错误:Theoperator>isundefinedfortheargumenttype(s)T,long但如果我显式执行该函数,它会编译:privatestaticLongextractLong(Longvalue){if(valueLong.MAX_VALUE){thrownewNumberFormatException("Conversionfrom"+value+"toLongwilloverflow");}returnvalu