Java虚拟机的数组处理

问题描述 投票:0回答:3

我对你们所有人都有一个愚蠢的问题。鉴于以下Java代码

public void funct(String a) {
    byte[] bytearr;

    bytearr = new byte[a.getBytes().length];
    bytearr = a.getBytes();
}

新通话是否有任何改变?特别是,是否以与

]不同的方式处理代码
public void funct(String a) {
    byte[] bytearr;

    bytearr = a.getBytes();
}

我问是因为,当执行时,两者都呈现相同的结果,如果],我将无法获得>

  • 它们是不同的(在第一种情况下,空间是分配和填充的,而在第二种情况下,它更像是“指针分配”)。
  • 它们是相同的,我想得太多了。
  • 第二个是错误的,但是JVM比我聪明并且可以解决它。
  • 总的来说,任何建议来观察JVM背后的内存分配/魔术行为都将受到赞赏。

谢谢!

我对你们所有人都有一个愚蠢的问题。给定下面的Java代码public void funct(String a){byte [] bytearr; bytearr =新的byte [a.getBytes()。length]; bytearr = a.getBytes(); } ...

java arrays jvm new-operator
3个回答
1
投票

唯一的区别是,您在第一个代码段中创建了一个多余的不必要的对象。如果要证明这一点,可以在第一个指向第二个数组引用,打印出它们的等效性,然后在第一个数组上调用string.getBytes()并再次测试其等效性:


0
投票

两个代码块的最终结果是相同的。第一个版本做了一些不必要的额外工作。


0
投票

它们是不同的,让我们看一下字节码:

© www.soinside.com 2019 - 2024. All rights reserved.