こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

classファイル内の変数名について

2つのclassファイルをそれぞれ逆コンパイルして内容を確認したところ、
以下のように、それらしい変数名と機械的に振られたような変数名になっていました。
・A.class → A.java
 String atai = "aaa"; ← 元のプログラムと同じ変数名(atai)
 
・B.class → B.java
 Stinrg s1 = "aaa"; ← 機械的に振られている変数名(s1)

コンパイル方法の違いで変数名が機械的になってしまうことがあるのでしょうか。
作業担当者が居なくなってしまって、当時の状況を確認することができません。
多分、同じソースファイルのはずなのですが、本当に同じ内容なのか
比較したいのに、微妙な違いがあるため比較ができなくて困っています。
引数も微妙に違っているようなので、それらしい変数名か機械的なものか
どちらかに統一させてデコンパイルする方法があったら教えてください。
また原因も知りたいです。
アドバイスをお願いします。

投稿日時 - 2019-10-02 14:11:52

QNo.9662865

困ってます

質問者が選んだベストアンサー

>コンパイル方法の違いで変数名が機械的になってしまうことがあるのでしょうか。

あります。
メソッドのローカル変数は変数名を保持しておく必要性がありませんから、
コンパイル時に-gオプションを指定しないとなくなります。

投稿日時 - 2019-10-02 20:43:13

お礼

ありがとうございます。
確かに-g オプションで内容が変わりました。
今回はclass 同士で比較をしたかったので、これだと比較はできなさそうですね。
残念です。

投稿日時 - 2019-10-17 09:04:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ローカル変数とフィールドの違いではないでしょうか。
下記のようなクラスがあった場合、intLocalはclassファイルの中に名前が残らず、intFieldはコンパイル後も名前が保存されると思います。
public class Test {
private int intField;
public void setInt(int intLocal) { intField = intLocal; }
}

投稿日時 - 2019-10-02 20:49:16

お礼

ありがとうございます。
確かに-g オプションで内容が変わりました。
今回はclass 同士で比較をしたかったので、これだと比較はできなさそうですね。
残念です。

投稿日時 - 2019-10-09 19:03:32

あなたにオススメの質問