Привет, мне было интересно, насколько файлы классов Java меняются в разных компиляторах. Итак, насколько меняются фактические байты, если файлы .java скомпилированы, скажем, Sun JDK 1.4, 1.5 1.6 или даже IBM JDK. Я знаю, что файлы классов могут отличаться в отношении отладочной информации и запутывания, но давайте предположим, что эти параметры одинаковы, поэтому включена отладочная информация, без запутывания. Если бы я запустил MD5 или SHA-1 в файле .class, который был скомпилирован JDK 1.4, был бы хэш другим, если бы я скомпилировал его в JDK 1.5, но с таргетингом на 1.4, что при нацеливании на JDK 1.5?
Также в связи с этим изменяется ли двоичный файл файла класса при использовании разных зависимостей или по-разному задается вопрос: может ли двоичный файл файла класса измениться в зависимости от его зависимостей?
И последнее, но не менее важное: существуют ли программные способы анализа метаданных файла .class для определения версии компилятора и/или переключателей, которые использовались при его компиляции?