java - C 中的堆栈使用与 Java 中的堆栈使用

标签 java c stack

我正在学习堆栈的用法,我注意到它们在 C 和 Java 中的使用方式不同,或者显然是不同的。例如,下面用 C 编写的代码将不起作用,因为它会破坏“name”

char* getName(){
char name[32];
scanf( "%s",name);
return name;
}

int main (int argc, char *argv[]){
char *myName = getName();

printf("%s", myName);
}    

但是,如果我用 Java 编写类似的东西,它就可以正常工作:

public static String getName(){
String name = "A name";
return name ; 

}

static void main(String[] args){
String name = getName();
System.out.print(name);
}

我想知道为什么。为什么堆栈在 Java 中不会破坏,但在 C 中却会破坏?

最佳答案

在Java中,局部变量的内存不是在堆栈上分配的...只有引用放在堆栈上。对象本身被放入堆中。

关于java - C 中的堆栈使用与 Java 中的堆栈使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59276896/

相关文章:

c++ - 如何初始化 unsigned long long 类型?

C++ Stack Fibinacci Hw 问题澄清

opengl - 如何将 "clear color"插入属性堆栈

java - 如何通过 selenium 和 xpath 检索雅虎搜索自动建议

java - java stderr 去哪儿了?

c++ - 为 Arduino 编写库

c - 为什么我从以下 C 代码中得到段错误?

Java transient 关键字和 null

java - jboss_init_redhat 不工作

canvas - Kinetic.JS - 无法更改图层的 z-index 顺序?