String a = "a" + "b";
这个过程中生成了几个对象?
我个人觉得是2个 理由等下说 不知道对不对
0个或1个,编译过程会把"a"+"b"合并,如果原来有"ab",则不会创建,如果原来没有,则会创建一个
会不会是0个或3个呢,我想
你现在的a和b是常量,编译器就有了,分配一个a变量就好了
String a = "a" + "b";
0000005d mov eax,dword ptr ds:[036220B0h]
00000063 mov dword ptr [ebp-44h],eax
初始化a的时候,字符串a和b作为常量,所以只有a一个对象。
为什么不是三个呢 String类型的不是对象吗
只创建了一个对象a,字符ab是存储在常量池中的。javap可以看到这行代码执行的是ldc字节码。
仔细想了下,应该是一个对象都没有创建,因为反编译代码中根本没有new操作,本质上定义的String a还是一个常量串。
如果是常数,编译器可以优化的。如果是变量,那么需要3个。
1个。是由最后生成的那个是创建的对象,数据源两个都是常量对象,是编译的时候已经生成的。
int a = 1 + 2;
会产生几个int呢?
程序的内存分配:
1、栈区(stack)
2、堆区(heap)
3、全局区(静态区)(static)
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。