java的存储空间和按值传递
来源:互联网 发布:做淘宝买什么电脑好 编辑:程序博客网 时间:2024/06/09 17:54
首先,java存储数据的地方有两个,一个叫做stack,一个叫做heap。
main 方法中有参数a 在其自己的stack中,并且背赋值为1。当a调用方法nothing的时候,创建方法nothing的stack,参数a按值传递,得到一个副本,执行方法nothing,把副本的值改为2。随后方法nothing结束,其stack被销毁。等于什么也没有做。
main方法中变量mybox为引用类型,指向heap中的对象Box,Box中存储着一个类变量a,等于2。
heap存储所有的对象和类变量,除了被声明为static的类变量
stack存储所有的局部变量。
java中的参数传递是按值传递的。也就是说,参数有了一个副本,这个副本与原来的参数并不一样。收到参数的方法并不能直接改变原来的参数。
public class Box {static void nothing(int a){a = 2;}public static void main(String args[]){int a = 1;nothing(a);System.out.println(a);}}
main 方法中有参数a 在其自己的stack中,并且背赋值为1。当a调用方法nothing的时候,创建方法nothing的stack,参数a按值传递,得到一个副本,执行方法nothing,把副本的值改为2。随后方法nothing结束,其stack被销毁。等于什么也没有做。
但是,当方法的参数为引用变量 的时候,情况有一点差别。
public class Box {int a = 1;static void set(Box b){b.a = 2;}public static void main(String args[]){Box mybox = new Box();set(mybox);System.out.println(mybox.a);}}
main方法中变量mybox为引用类型,指向heap中的对象Box,Box中存储着一个类变量a,等于2。
调用set方法的时候,创建set的stack,内部参数b接收变量Box,得到一个副本,同样指向对象Box,也就是和mybox指向同一个对象。参数改变Box中类变量a的值,随后方法结束,其stack被销毁,但是mybox所指向的对象的值已经改变。
如果在方法set中new 一个Box对象给b,那么就改变了b的指向,就不会改变mybox指向对象的参数。
0 0
- java的存储空间和按值传递
- Java的按值传递和引用传递
- Java的值传递和引用传递
- java的引用传递和值传递
- java的引用传递和值传递
- Java的引用传递和值传递
- java的值传递和引用传递
- java的值传递和引用传递
- java的值传递和引用传递
- Java:理解Java中函数参数传递的【按值传递】和【按引用传递】
- Java的参数传递有值传递和引用传递
- Java按值传递和引用传递
- 关于JAVA中参数传递问题的总结(按值传递和引用传递)
- JAVA中参数传递问题的总结(按值传递和引用传递)
- 值传递和引用传递,java到底按什么传递的
- JAVA中参数传递(按值传递和引用传递)
- java复习-java的值传递和引用传递
- java存储空间的面试题
- final类型
- DRP之JSP HelloWorld
- 打印命令行参数,涉及的问题
- 初步学习和使用SQL Developer
- lua require 搜索路径
- java的存储空间和按值传递
- poj2185 Milking Grid 二维kmp
- 【二叉树中序遍历】Binary Tree Inorder Traversal
- Paste Deployment简介以及cinder-api-paste.ini的解析(2)
- 路由器重围特权密码
- eclipse常用快捷键
- AJAX
- sprintf和snprintf函数用法简介
- Observer与Observable