我最近不小心提交了我的.class
文件,而不是.java
文件。
在评分员的反馈后,我提交了我的.java
文件。从那里一切都很好,平地机相信这是一个诚实的错误。
但是,是否有一种简单的方法让评分者检查这两个文件是否真的匹配?
到目前为止,我只想到了两个解决方案:
编译.java
,看看输出的.class
是否相同/非常相似。这可能非常依赖于编译器。如果编译器相同,是否有其他变量会使.class
不同?
反编译.class
文件,并进行字符比较。这似乎需要做更多工作,并且可能与.java
文件匹配甚至低于解决方案1.
有可靠的方法来检查吗?
答案 0 :(得分:1)
如果在完全相同的环境中使用完全相同的编译器进行编译,则很可能会获得相同的类文件。
但是,如果编译器或平台存在差异,您应该查看this discussion。
除此之外,您可能需要在功能上对其进行评估。也就是说,编写一个测试类来运行每个类的所有所需行为,并检查它们是否都返回相同的结果。
答案 1 :(得分:-2)
我做了一个非常简单的测试,它对我有用..
我编译了一个简单的java程序并创建了它的.class
文件
然后我只需更改System.out.println
内的一个字母,然后再次创建一个.class
文件
然后在linux中使用diff
命令,它告诉我two binary files are different
所以我认为不是反编译.class
文件然后检查两个.java
文件,而是直接检查两个.class文件
至少它对我有用。
希望这有帮助!