2015-08-08 43 views
0

标题听起来像一个愚蠢的问题,但这是困扰我,我想不出一个简洁的方式来说明。如何比较两个项目unlocalized names

不管怎么说,这里是我使用的代码:

public class OreSword extends ItemSword{ 

public OreSword(SWORDTYPES sword) 
{ 
    super(sword.getMaterial()); 
    setUnlocalizedName(RefStrings.MODID + "_" + sword.getName()); 
    setTextureName(RefStrings.MODID + ":" + sword.getName()); 
    //setCreativeTab(CreativeTabs.tabCombat); 
    sword.setSword(this); 
} 

public boolean hitEntity(ItemStack sword, EntityLivingBase target, EntityLivingBase self) 
{ 
    System.out.println("this is my override"); 
    sword.damageItem(1, self); 
    if(sword.getUnlocalizedName() == SWORDTYPES.COAL.getSword().getUnlocalizedName()) 
    { 
     System.out.println("this is my sword"); 
     target.setFire(100); 
    } 
    return true; 
} 

public static enum SWORDTYPES 
{ 
    COAL("CoalSword", 1, 131, 4.0F, 1.0F, 5), 
    DIAMOND("DiamondSword", 3, 1200, 8.0F, 3.0F, 30), 
    EMERALD("EmeraldSword", 3, 2300, 8.0F, 4.0F, 10), 
    GOLD("GoldSword", 0, 25, 10.0F, 1.0F, 12), 
    IRON("IronSword", 2, 131, 6.0F, 2.0F, 14), 
    LAPIS("LapisSword", 1, 131, 4.0F, 1.0F, 44), 
    QUARTZ("QuartzSword", 3, 131, 8.0F, 3.0F, 10), 
    REDSTONE("RedstoneSword", 2, 131, 6.0F, 2.0F, 14); 

    private String name; 
    /*private int hLevel; 
    private int mUse; 
    private float effic; 
    private float damage; 
    private int ench;*/ 
    private ToolMaterial mat; 
    private OreSword sword; 
    private SWORDTYPES(String name, int hLevel, int mUse, float effic, float damage, int ench) 
    { 
     this.name = name; 
     this.mat = EnumHelper.addToolMaterial(name, hLevel, mUse, effic, damage, ench); 
    } 
    public String getName(){return name;} 
    public ToolMaterial getMaterial(){return mat;} 
    public void setSword(OreSword sword){this.sword = sword;} 
    public OreSword getSword(){return sword;} 
} 
} 

当我运行这段代码它输出线“这是我重写”,但它永远不会打印出一行:“这是我的剑”

我在游戏中测试的剑是正确的剑,我已经测试了这个创意,所以剑不会受到任何伤害,并且在剑的伤害下生存。 如果有人可以向我解释我应该怎么做来检查项目,或者我可能在执行中缺少什么,我将不胜感激。

+0

...为什么你在做你自己的对象非常昂贵的字符串比较? – Tschallacka

回答

1

在比较Java中的两个字符串时始终使用public boolean equals(Object obj)

if(sword.getUnlocalizedName().equals(SWORDTYPES.COAL.getSword().getUnlocalizedName()))

而且,如果他们不等于一个好的技巧是尝试,并打印出来,看看是什么让他们不公平,例如;

System.out.println("sword: " + sword.getUnlocalizedName()); System.out.println("SWORDTYPES: " + SWORDTYPES.COAL.getSword().getUnlocalizedName());

+0

这工作......困惑,为什么它的工作虽然... 字符串是相同的,所以为什么.equals()工作时,==不? – UberAffe

+0

@UberAffe - '=='不会比较字符串的内容。 –

+1

@UberAffe当一个对象存储在内存中时,它获得一个内存地址'0xAAAAA1'。第二个对象获得'0xAAAAA2'等等......当你用'“abc def”实例化一个字符串时'java将首先查找它的字符串池,如果它存在并且使用它的内存地址访问该字符串(查找字符串池)。 '“abc def”== new String(“abc def”)'将等同于'0xAAAAA1 == 0xAAAAA2',并且该测试将失败。它们不是同一个对象。 ''abc def“==”abc def“'会通过,因为它的'0xAAAA1 == 0xAAAA1',因为它将字符串创建替换为字符串池中的对象 – Tschallacka