下面的两种写法有区别吗,在内存结构上?

源码工厂 其他问答 1
new PBigBossBoraddcast().execute();
PBigBossBoraddcast procedure = new PBigBossBoradcast();
procedure.execute();

回复

共4条回复 我来回复
  • 代码工厂
    这个人很懒,什么都没有留下~
    评论

    new PBigBossBoraddcast().execute(); 这种就是新建了一个对象调用它的execute()方法。

    PBigBossBoraddcast procedure = new PBigBossBoradcast(); procedure.execute(); procedure.execute1(); procedure.execute2(); 这种就是新建了一个对象,并且保留了这个对象的引用,然后调用execute()方法,如果你还想调用这个对象的其他方法就很方便。因为你有这个对象的引用。

    第二种写法可以调用一个对象里面的多个方法。推荐第二种写法。

    0条评论
  • 毕设助手
    这个人很懒,什么都没有留下~
    评论

    方法的参数和局部变量对应栈帧里的局部变量表。

    所以第二种写法就是局部变量表多了一个slot,创建对象后操作数栈的引用存储到局部变量表中(astore指令),调用方法之前再把对应的本地变量表中的slot加载到操作数栈上(aload指令)。

    然而这些会被JIT优化掉,所以事实上没有区别。

    0条评论
  • 源码客栈
    这个人很懒,什么都没有留下~
    评论

    个人对数据结构不是很熟,所以以下为通俗讲法,希望各位大神能够多多指点

    第一种算是一次性使用,用完就没了

    第二种赋予了变量名procedure,故在后文中可以继续调用procedure来使用相关方法。

    0条评论
  • 代码海岸
    这个人很懒,什么都没有留下~
    评论

    内存上结构没啥区别,如果一定要找区别,那就是第一个没有在方法的栈区保存引用地址。方法栈区内的上下文中不能够再次引用该堆区的对象,也就是所谓了一次性生活。。。用完就废了。 第二种则能继续在方法栈区继续引用。 如果此引用完全封闭在方法栈空间(没有被指向全局变量),那么在下次触发GC的时候,都会被回收。

    0条评论

发表回复

登录后才能评论