Java 这很有效吗?

Java 这很有效吗?,java,performance,minecraft,Java,Performance,Minecraft,在我的minecraft克隆中,我正在创建一种特殊类型的物品,名为食物(我自己发明的) 为了控制食物量,我这样做: if (currentFoodAmount > maxFoodAmount) { currentFoodAmount = maxFoodAmount; } if (currentFoodAmount < 0) { currentFoodAmount = 0; } if(currentFoodAmou

在我的minecraft克隆中,我正在创建一种特殊类型的物品,名为食物(我自己发明的)

为了控制食物量,我这样做:

    if (currentFoodAmount > maxFoodAmount) {

        currentFoodAmount = maxFoodAmount;
    }

    if (currentFoodAmount < 0) {

        currentFoodAmount = 0;
    }
if(currentFoodAmount>maxFoodAmount){
currentFoodAmount=maxFoodAmount;
}
如果(currentFoodAmount<0){
currentFoodAmount=0;
}
有没有更有效的方法

感谢所有对回答者的帮助(包括讽刺和建设性的批评)

p、 s.s.完整代码:

            if (currentFoodAmount > maxFoodAmount) {

        EntityPlayer.giveEffect(Effect.full);
        currentFoodAmount = maxFoodAmount;
    }

    if (currentFoodAmount < 0) {

        currentFoodAmount = 0;
    }

    if (currentFoodAmount == 0) {

        EntityPlayer.giveEffect(Effect.starved);
    }

        public static void tick() {

    if (!EntityPlayer.isDead) {

        --foodDecayRate;

        if (foodDecayRate == 0) {

            currentFoodAmount -= 5;
            foodDecayRate = 100;
        }
    }
}
if(currentFoodAmount>maxFoodAmount){
EntityPlayer.giveEffect(Effect.full);
currentFoodAmount=maxFoodAmount;
}
如果(currentFoodAmount<0){
currentFoodAmount=0;
}
如果(currentFoodAmount==0){
EntityPlayer.giveEffect(Effect.饥饿);
}
公共静态无效勾号(){
如果(!EntityPlayer.ishead){
--食物硬脂酸盐;
如果(foodDecayRate==0){
currentFoodAmount-=5;
食品甘草酸盐=100;
}
}
}

使用java数学库效率较低,但可读性更强。这里有一个小例子:

  currentFoodAmount = Math.min(currentFoodAmount, maxFoodAmount);
  currentFoodAmount = Math.max(currentFoodAmount, 0);
效率更高,但可读性较差:

  currentFoodAmount = currentFoodAmount > 0 ? (currentFoodAmount < maxFoodAmount ? currentFoodAmount : maxFoodAmount ) : 0;
currentFoodAmount=currentFoodAmount>0?(currentFoodAmount
如果你想保存行,你可以想出一个非常难看的三元语句:

currentFoodAmount = currentFoodAmount > maxFoodAmount ? maxFoodAmount : (
    currentFoodAmount < 0 ? 0 : currentFoodAmount);
如果
y==0
,您的
x
变量将设置为
1
。如果
y!=0,则
x
将设置为
2

Java中的三元格式如下所示:

x = y == 0 ? 1 : 2;
conditional ? trueValue : falseValue;
请注意,这种技术通常不受欢迎,因为它通常会使代码难以阅读,而不是使用更详细的
if
/
else
子句。

if(currentFoodAmount>maxFoodAmount){
if (currentFoodAmount > maxFoodAmount) {

    currentFoodAmount = maxFoodAmount;
} else if (currentFoodAmount < 0) {

    currentFoodAmount = 0;
}
currentFoodAmount=maxFoodAmount; }否则如果(currentFoodAmount<0){ currentFoodAmount=0; }
通过添加else,它将更加高效(从组装角度看)
因此,如果它先运行if,就不会检查第二个条件,我认为没有比这更有效的方法了。大多数效率问题都涉及到创建不必要的对象或变量,这些对象或变量都会消耗内存,而这两者都不是您要做的

如果小代码片段每秒运行几次,即每次刷新时,您应该只担心它们的效率


您只有六行整洁的代码,不要对自己太苛刻。

这可能是您将得到的最好的代码。但是真的不用担心这个级别的效率:计算机对于简单的操作来说速度很快。担心算法的效率,不分配太多内存,等等。你可以使用Math.max和Math.min将代码缩短一点。这真的不值得回答:答案应该说明如何在Java字节码中做得更好。对我来说,这听起来有点像微优化。如果你有其他问题要处理,你的代码是否快速取决于此。谷歌“Donald Knuth Premature Optimization”,反复阅读,直到你意识到这是一个多么可笑的问题,然后再多读几遍!不过,这肯定更有效吗?我原以为两个方法调用,尽管是静态的,除非它们被内联,否则代价会更高,而且在这种情况下,它将以他已经拥有的代码结束,不是吗?我优先选择这种方式,谢谢。虽然我以前见过使用数学(数学不是数学)等等,为什么它不是currentFoodAmount=Math.min(currentFoodAmount,0);currentFoodAmount=Math.max(currentFoodAmount,maxFoodAmount);因为如果0小于currentFoodAmount,那么你要取最大值(0),如果currentFoodAmount大于maxFoodAmount,那么你要取最小值(maxFoodAmount),这个值听起来仍然是倒转的,我很可能会想太多了,没有
maxFoodAmount
是负数你的意思是“每秒几千次,不断”我认为这真的很复杂,虽然我以前见过它的使用,但我从来没有使用过,也不理解?。你能给我链接一个关于它的教程吗?同样的:太实际了,听起来太有用了,我会喜欢这个问题,以方便访问