标签:存储 name 张三 哪里 person 李四 str 数据
寄存器 : 最快的存储区,位于处理器中,寄存器会按需求自行分配空间,java不能控制寄存器,所以在程序中感觉不到它的存在
栈(stack) : 位于RAM(内存)中,速度仅次于寄存器,存储对象的引用(地址),指向堆中的对象. 基本类型直接存储值在栈中
堆(heap) : 也位于RAM中,比栈略慢,存储对象
常量存储 : 直接存放在程序代码内部
非RAM存储 : 比如流对象和持久化对象.存储在磁盘中.
Java是值传递还是引用传递?
给方法传参时,可以看作是用等号("=")赋值.
String name = "张三"; obj.setName(name);//可以看作是str=name="张三",此时str和name都指向"张三"; public void setName(String str) { str = "李四"; //等于是给str重新赋值,不在指向"张三"了,转而指向李四,所以name指向"张三"并没有受到影响 System.out.println(str == name); //false }
但是有一种情况下操作方法内的局部变量会使实参受到影响受到影响,如下
Person person = new Pserson("张三"); obj.setPserson(person); //someone=person=Person对象 public void setPerson(Person someone){ someone.setName("李四"); System.out.println(person.name); //此时输出李四而不是张三. someone = new Person("王五"); System.out.println(person.name); //此时输出李四而不是王五. //看出来区别了吗? }
上面的例子可以看出来,调用方法时,实参传入的是对象的引用,此时两个变量都指向同一个对象,调用对象的方法是能够影响到方法外边的成员变量的,如果重新赋值就不行了.
标签:存储,name,张三,哪里,person,李四,str,数据 来源: https://www.cnblogs.com/jinyu59/p/10739337.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。