Buggy code:
public class ClassFileReader extends ClassFileStruct implements AttributeNamesConstants , IBinaryType { public static ClassFileReader read ( File file ) throws IOException , ClassFormatException { } public static ClassFileReader read ( File file , boolean fullyInitialize ) throws IOException , ClassFormatException { } public static ClassFileReader read ( ZipFile zip , String filename ) throws IOException , ClassFormatException { } public static ClassFileReader read ( ZipFile zip , String filename , boolean fullyInitialize ) throws IOException , ClassFormatException { } public static ClassFileReader read ( String fileName ) throws IOException , ClassFormatException { } public static ClassFileReader read ( String fileName , boolean fullyInitialize ) throws IOException , ClassFormatException { } private int accessFlags ; private char [ ] classFileName ; private char [ ] className ; private int classNameIndex ; private int constantPoolCount ; private int [ ] constantPoolOffsets ; private FieldInfo [ ] fields ; private int fieldsCount ; private InnerClassInfo innerInfo ; private int innerInfoIndex ; private InnerClassInfo [ ] innerInfos ; private char [ ] [ ] interfaceNames ; private int interfacesCount ; private MethodInfo [ ] methods ; private int methodsCount ; private char [ ] signature ; private char [ ] sourceFileName ; private char [ ] superclassName ; private long tagBits ; private long version ; public ClassFileReader ( byte [ ] classFileBytes , char [ ] fileName ) throws ClassFormatException { } public ClassFileReader ( byte [ ] classFileBytes , char [ ] fileName , boolean fullyInitialize ) throws ClassFormatException { } public int accessFlags ( ) { } private int decodeAnnotation ( int offset ) { } private int decodeElementValue ( int offset ) { } private int decodeElementValueForJavaLangAnnotationTarget ( int offset ) { } private int decodeElementValueForJavaLangAnnotationRetention ( int offset ) { } private void decodeStandardAnnotations ( int offset ) { } private char [ ] getConstantClassNameAt ( int constantPoolIndex ) { } public int [ ] getConstantPoolOffsets ( ) { } public char [ ] getEnclosingTypeName ( ) { } public IBinaryField [ ] getFields ( ) { } public char [ ] getFileName ( ) { } public char [ ] getGenericSignature ( ) { } public char [ ] getInnerSourceName ( ) { } public char [ ] [ ] getInterfaceNames ( ) { } public int getKind ( ) { } public IBinaryNestedType [ ] getMemberTypes ( ) { } public IBinaryMethod [ ] getMethods ( ) { } public int getModifiers ( ) { } public char [ ] getName ( ) { } public char [ ] getSuperclassName ( ) { } public long getTagBits ( ) { } public long getVersion ( ) { } private boolean hasNonSyntheticFieldChanges ( FieldInfo [ ] currentFieldInfos , FieldInfo [ ] otherFieldInfos ) { } private boolean hasNonSyntheticMethodChanges ( MethodInfo [ ] currentMethodInfos , MethodInfo [ ] otherMethodInfos ) { } public boolean hasStructuralChanges ( byte [ ] newBytes ) { } public boolean hasStructuralChanges ( byte [ ] newBytes , boolean orderRequired , boolean excludesSynthetic ) { } private boolean hasStructuralFieldChanges ( FieldInfo currentFieldInfo , FieldInfo otherFieldInfo ) { if ( ( currentFieldInfo . getModifiers ( ) ) != ( otherFieldInfo . getModifiers ( ) ) ) return true ; if ( ! ( CharOperation . equals ( currentFieldInfo . getName ( ) , otherFieldInfo . getName ( ) ) ) ) return true ; if ( ! ( CharOperation . equals ( currentFieldInfo . getTypeName ( ) , otherFieldInfo . getTypeName ( ) ) ) ) return true ; if ( ( currentFieldInfo . hasConstant ( ) ) != ( otherFieldInfo . hasConstant ( ) ) ) return true ; if ( currentFieldInfo . hasConstant ( ) ) { Constant currentConstant = currentFieldInfo . getConstant ( ) ; Constant otherConstant = otherFieldInfo . getConstant ( ) ; if ( ( currentConstant . typeID ( ) ) != ( otherConstant . typeID ( ) ) ) return true ; if ( ! ( currentConstant . getClass ( ) . equals ( otherConstant . getClass ( ) ) ) ) return true ; switch ( currentConstant . typeID ( ) ) { case TypeIds . T_int : return ( currentConstant . intValue ( ) ) != ( otherConstant . intValue ( ) ) ; case TypeIds . T_byte : return ( currentConstant . byteValue ( ) ) != ( otherConstant . byteValue ( ) ) ; case TypeIds . T_short : return ( currentConstant . shortValue ( ) ) != ( otherConstant . shortValue ( ) ) ; case TypeIds . T_char : return ( currentConstant . charValue ( ) ) != ( otherConstant . charValue ( ) ) ; case TypeIds . T_long : return ( currentConstant . longValue ( ) ) != ( otherConstant . longValue ( ) ) ; case TypeIds . T_float : return ( currentConstant . floatValue ( ) ) != ( otherConstant . floatValue ( ) ) ; case TypeIds . T_double : return ( currentConstant . doubleValue ( ) ) != ( otherConstant . doubleValue ( ) ) ; case TypeIds . T_boolean : return ( currentConstant . booleanValue ( ) ) != ( otherConstant . booleanValue ( ) ) ; <START_BUG> case T_String : <END_BUG> return ! ( currentConstant . stringValue ( ) . equals ( otherConstant . stringValue ( ) ) ) ; } } return false ; } private boolean hasStructuralMethodChanges ( MethodInfo currentMethodInfo , MethodInfo otherMethodInfo ) { } private void initialize ( ) throws ClassFormatException { } public boolean isAnonymous ( ) { } public boolean isBinaryType ( ) { } public boolean isLocal ( ) { } public boolean isMember ( ) { } public boolean isNestedType ( ) { } protected void reset ( ) { } public char [ ] sourceFileName ( ) { } public String toString ( ) { } }

Fix:
case TypeIds . T_JavaLangString :