java 中的字符串如何传递到方法中(就内存而言)
How are strings passed into methods in java (In terms of memory)
当我们调用方法时,如果您传入原始类型,则该值会在调用方法时放在堆栈帧中。如果你传入一个引用类型,如果它不为空,你就已经在堆上的某个地方创建了它,放在堆栈上的是对它的引用。
但是当我做类似
的事情时,堆栈上会发生什么
person.setName("Jack");
它是否首先在堆上创建一个字符串对象,然后将对该对象的引用放在堆栈上?
根据您的代码,"Jack"
是一个字符串 常量 ,因此它位于 run-time constant pool 中。该池位于 JVM 的一个称为方法区的区域中。
但是,如果代码改为:
Person.SetName(new String("Jack"));
然后传递的引用指向堆上的一个对象,对于任何引用类型通常都是如此。
当我们调用方法时,如果您传入原始类型,则该值会在调用方法时放在堆栈帧中。如果你传入一个引用类型,如果它不为空,你就已经在堆上的某个地方创建了它,放在堆栈上的是对它的引用。
但是当我做类似
的事情时,堆栈上会发生什么person.setName("Jack");
它是否首先在堆上创建一个字符串对象,然后将对该对象的引用放在堆栈上?
根据您的代码,"Jack"
是一个字符串 常量 ,因此它位于 run-time constant pool 中。该池位于 JVM 的一个称为方法区的区域中。
但是,如果代码改为:
Person.SetName(new String("Jack"));
然后传递的引用指向堆上的一个对象,对于任何引用类型通常都是如此。