Не работает

Версия Minecraft
1.7.10
Почему переменная string не равна значению переменной int?
Java:
package example;

public class example{
    int i = 0;
    String str = String.valueOf(i);
    
    @SubscribeEvent
    public void onKillMob(LivingDeathEvent e){
        if(e.source.getEntity() instanceof EntityPlayer){
                i = i + 5;
                str = String.valueOf(i);  //WHY str != String.valueOf(i)?
                if(str = String.valueOf(i)){
                    e.entity.dropItem(Items.apple, 1);
            }
        }
}

Подозреваю, что ошибка в применении кода. Недавно начал изучать Java.
 
Решение
-_-
int хранить 0xFFFFFFFF
String
это массив byte - byte это 0xFF, массив это очень много.
Java:
str = String.valueOf(i);  //WHY str != String.valueOf(i)?
if(str = String.valueOf(i)){
Да действия подряд. Для условия обычно используют два равно ' == '.
Цифровой диапазон с Byte'овым не правильно.
И даже если у тебя будут два String с одинаковыми набором Byte, то они не будут равны, нужно проверять через equals объекта String.

timaxa007

Модератор
5,831
409
672
-_-
int хранить 0xFFFFFFFF
String
это массив byte - byte это 0xFF, массив это очень много.
Java:
str = String.valueOf(i);  //WHY str != String.valueOf(i)?
if(str = String.valueOf(i)){
Да действия подряд. Для условия обычно используют два равно ' == '.
Цифровой диапазон с Byte'овым не правильно.
И даже если у тебя будут два String с одинаковыми набором Byte, то они не будут равны, нужно проверять через equals объекта String.
 
Спасибо за ответ, починил, вроде работает.
Но можно задать вопрос?
Делаю кастомный гуи с изменяемой String, но это не совсем работает
Java:
package Example.GUI;

import org.lwjgl.opengl.GL11;

import BoG.items.ItemReg;
import BoG.lib.Strings;
import BoG.mobs.EntitySatur;
import akka.actor.FSM.Event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;import cpw.mods.fml.common.network.internal.FMLMessage.EntityAdjustMessage;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingEvent;

public class GUItest extends GuiScreen{
    
    int guiWidth = 256;
    int guiHeight = 164;
    
    int tabWidth = 20;
    int tabHeight = 20;
    
    int i = 0;
    String reputationAmount = String.valueOf(i);
    
    @SubscribeEvent
    public void onKillMob(LivingDeathEvent e){
        if(e.source.getEntity() instanceof EntityPlayer){
            if(e.entity instanceof EntitySatur){
                
                i = i + 5;
                reputationAmount = String.valueOf(i);  //WHY reputationAmount != String.valueOf(i)?
                if(reputationAmount.equals(reputationAmount.valueOf(i))){
                    e.entity.dropItem(ItemReg.diamond_nugget, 1);
                }
            }
        }
    }
    
    @Override
    public void drawScreen(int x, int y, float ticks){
        int guiX = (width - guiWidth) / 2;
        int guiY = (height - guiHeight) / 2;
        
        GL11.glColor4f(1, 1, 1, 1);
        drawDefaultBackground();
        mc.renderEngine.bindTexture(new ResourceLocation(Strings.MODID, "textures/gui/guitest.png"));
        drawTexturedModalRect(guiX, guiY, 0, 0, guiWidth, guiHeight);
        //drawTexturedModalRect(guiX + 250, guiY + 150, 0, 450, tabWidth, tabHeight);
        fontRendererObj.drawString(I18n.format("tooltip.reputation"), guiX + 40, guiY + 5, 0x000000);
        
        fontRendererObj.drawString(reputationAmount, guiX + 80, guiY + 10, 0x000000);
        
        super.drawScreen(x, y, ticks);
    }
}
Как можно починить?
 

timaxa007

Модератор
5,831
409
672
Java:
reputationAmount = String.valueOf(i);  //WHY reputationAmount != String.valueOf(i)?
if(reputationAmount.equals(reputationAmount.valueOf(i))){
Типа ты проверяешь почти на самого себя. Типа надо переместить:
Java:
reputationAmount = String.valueOf(i);  //WHY reputationAmount != String.valueOf(i)?
После условия. Хотя у тебя написан код так себе. На сервере куча игроков, переменная будет действовать на каждого игрока, который кого-то убивает.
 
Сверху