反编译.class和原java文件的源码对比

大家都知道,java文件编译后是.class文件,如果我们通过反编译的方式,重新反编译成java文件,此java文件和原来编译前的java文件有什么区别呢?

下面主要对比字面型常量之间、变量之间以及两者之间运算在编译后的差异。

例1:源代码:

int a=1+2;
System.out.println(a);
int b=10;
int c=20;
int d=a+b;
System.out.println(d);

.class文件反编译后的java文件:

int a = 3;
System.out.println(a);
int b=10;
int c=20;
int d=a+b;
System.out.println(d);

例2:源代码:

String str1 = "abcd"; // 直接赋值
String str2 = new String("1234"); // 使用标准的new调用构造方法
String str6="ab"+"cd";
String str7="ab";
String str8="cd";
String str9=str7+str8;

.class文件反编译

String str1 = "abcd";
String str2 = new String("1234");
String str6 = "abcd";
String str7 = "ab";
String str8 = "cd";
String str9 = (new StringBuilder(String.valueOf(str7))).append(str8).toString();

例3:源代码:

public class Test02 {
	public static final String A = "ab";
	public static final String B = "cd";

	public static final String C;
	public static final String D;
	static {
		C = "ab";
		D = "cd";
	}

	public static void main(String[] args) {
		String ssss = A + B;
		System.out.println(ssss == t);// true
		System.out.println((C + D) == t);// false
	}

.class文件反编译:

public class Test02
{

	public static final String A = "ab";
	public static final String B = "cd";
	public static final String C = "ab";
	public static final String D = "cd";

	public Test02()
	{
	}

	public static void main(String args[]){
		String ssss = "abcd";
		System.out.println(ssss == t);
		System.out.println((new StringBuilder(String.valueOf(C))).append(D).toString() == t);
	}

例4:源代码:

String s2 = "cd";
String ss = (new StringBuilder("ab")).append(s2).toString();

总结:

  1. 两个字面型常量(非字符型)相加减乘除,编译期会运算出结果。
  2. 两个字符型常量相加,编译期就会进行拼接得出结果。
  3. 一个字面型常量(非字符型)和一个变量(非字符型)相加减乘除,编译期是不做处理的。
  4. 两个字符串类型的变量相加,或者一个字面型常量(字符串类型)和一个变量(字符串类型)相加编译期会进行StringBuilder的包装处理,但是不会得出结果。
  5. 注意: 单独的int a=10;但是a后面并没有使用,编译后还是会有int a=10;存在的。
  6. 进一步结论: 只有当两个字面型常量直接运算时,会在编译期得出结果。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要下载enhancer.class源码,首先需要确定enhancer.class是哪个软件或工具的源码。enhancer.class通常是一个Java文件,可能是某个框架、库或应用程序的一部分。 一种常见的下载方法是在网上搜索相关的软件或工具的官方网站或源代码仓库。在这些网站上,通常提供软件的源码下载选项。 要下载enhancer.class源码,可以按照以下步骤进行: 1. 打开一个互联网浏览器,然后在搜索引擎中搜索“enhancer.class源码下载”。 2. 根据搜索结果,找到与您寻找的软件或工具相关的官方网站或源代码仓库。 3. 进入官方网站或源代码仓库,浏览页面以寻找源码下载选项。 4. 有些网站可能直接提供源码下载链接,您只需点击该链接即可下载源码;另一些网站则可能需要您先进行注册或登录才能下载源码。 5. 如果找不到源码下载选项,您可以查找该软件或工具的开发者联系信息,然后与其联系以获取源码。 6. 一旦找到源码下载选项并成功下载源码文件(通常是一个压缩文件),就可以解压缩文件,并按照相关说明或文档来使用源码。 需要注意的是,有些软件或工具的源码可能是私有的或付费的,可能需要满足一定的条件才能获取源码。此外,为了遵守相关法律和规定,下载和使用源码时应遵循适用的许可证和协议。 总之,要下载enhancer.class源码,查找相关软件或工具的官方网站或源代码仓库,并按照相关的下载步骤进行操作。 ### 回答2: 要下载enhancer.class源码,首先需要明确enhancer.class是指哪种类型的源码。enhancer.class通常是指Java字节码文件,是通过编译Java源码得到的文件。 1. 在网上搜索:你可以通过在搜索引擎中输入"enhancer.class源码下载"来查找相关资源。这可能为你提供一些网站或论坛,这些地方可能存有相关的源码文件。 2. GitHub:许多开源项目的源代码存储在GitHub上。你可以使用GitHub的搜索功能来查找是否有人分享了enhancer.class源码文件。如果找到了相关的仓库,你可以下载或克隆代码库,以获取源码文件。 3. 联系作者:如果你知道enhancer.class的来源和作者,你可以尝试通过邮件、社交媒体等方式联系作者,询问是否有源码可供下载。作者可能向你提供源码文件或指导你在哪里获取。 4. 其他代码托管平台:除了GitHub,还有其他一些代码托管平台,如Bitbucket、GitLab等。你可以在这些平台上搜索相关源码文件。 无论你是通过搜索引擎、GitHub还是其他方式找到源码文件,一旦找到并下载了enhancer.class源码文件,你可以使用Java反编译工具来将其转换成可读的Java代码,以便进行修改、学习或调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初夏0811

你的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值