java中的引用传递问题
---恢复内容开始---
第一个引用传递案例:
class Message{
private int num;
public Message(int num){
this.num=num;
}
public void setNum(int num){
this.num=num;
}
public int getNum(){
return this.num;
}
}
public class Test{
public static void main(String args[]){
Message msg = new Message(10);
change(msg);//引用传递
System.out.println(msg.getNum());//输出100
}
public static void change(Message temp){
msg.setNum(100);
}
}
对该代码进行内存分析,值类型不会独自占有一块堆内存,必须要有实例化对象,而String类的匿名对象会独自占用一块堆内存,不需要对象

第二道引用传递案例
public class Test{
public static void main(String args[]){
String msg = "hello";
change(msg);
System.out.println(msg);//输出hello
}
public static void change(String temp){
temp="word";
}
}
String的匿名对象有独立的堆内存空间,此外字符串一旦声明则不可以被改变,若想改变只有改变其对象地址,内存分析:

第三个引用传递案例
class Message{
private String str;
public Message(String str){
this.str=str;
}
public void setStr(String str){
this.str=str;
}
public String getStr(){
return this.str;
}
}
public class Test{
public static void main(String args[]){
Message msg = new Message("hello");
change(msg);
System.out.println(msg.getStr()); //输出word
}
public static void change(Message temp){
temp.setStr("word");
}
}
---恢复内容结束---
第一个引用传递案例:
class Message{
private int num;
public Message(int num){
this.num=num;
}
public void setNum(int num){
this.num=num;
}
public int getNum(){
return this.num;
}
}
public class Test{
public static void main(String args[]){
Message msg = new Message(10);
change(msg);//引用传递
System.out.println(msg.getNum());//输出100
}
public static void change(Message temp){
msg.setNum(100);
}
}
对该代码进行内存分析,值类型不会独自占有一块堆内存,必须要有实例化对象,而String类的匿名对象会独自占用一块堆内存,不需要对象

第二道引用传递案例
public class Test{
public static void main(String args[]){
String msg = "hello";
change(msg);
System.out.println(msg);//输出hello
}
public static void change(String temp){
temp="word";
}
}
String的匿名对象有独立的堆内存空间,此外字符串一旦声明则不可以被改变,若想改变只有改变其对象地址,内存分析:

第三个引用传递案例
class Message{
private String str;
public Message(String str){
this.str=str;
}
public void setStr(String str){
this.str=str;
}
public String getStr(){
return this.str;
}
}
public class Test{
public static void main(String args[]){
Message msg = new Message("hello");
change(msg);
System.out.println(msg.getStr()); //输出word
}
public static void change(Message temp){
temp.setStr("word");
}
}
java中的引用传递问题的更多相关文章
- Java中的引用传递和值传递
Java中的引用传递和值传递 关于Java的引用传递和值传递,在听了老师讲解后,还是没有弄清楚是怎么一回事,于是查了资料,所以在这里与大家分享,有不对的地方,欢迎大家留言. java中是没有指针的,j ...
- Java中没有引用传递只有值传递(在函数中)
◆传参的问题 引用类型(在函数调用中)的传参问题,是一个相当扯的问题.有些书上说是传值,有些书上说是传引用.搞得Java程序员都快成神经分裂了.所以,我们最后来谈一下“引用类型参数传递”的问题. 如下 ...
- 理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习 ...
- (转载)理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天 ...
- 关于java中是引用传递还是值传递的问题!!!经常在笔试中遇到,今天终于弄明白了!
关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象).首先以两个例子开始:1)public class Test2 { public static vo ...
- java中的引用传递(同样适用于JS)
1 java中的数据类型: 有8种基本数据类型,分别为:byte(1),boolean(1),char(2),short(2),int(4),long(8),float(4),double(8) ...
- 关于java中是引用传递还是值传递的问题
关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象).首先以两个例子开始:1)public class Test2 { public static vo ...
- 一道笔试题来理顺Java中的值传递和引用传递
题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = ...
- java中的值传递和引用传递有什么区别呀?
值传递: (形式参数类型是基本数据类型和String):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参 ...
随机推荐
- ReflectASM-invoke,高效率java反射机制原理
前言:前段时间在设计公司基于netty的易用框架时,很多地方都用到了反射机制.反射的性能一直是大家有目共睹的诟病,相比于直接调用速度上差了很多.但是在很多地方,作为未知通用判断的时候,不得不调用反射类 ...
- web服务器学习2---httpd-2.4.29虚拟目录及访问控制
一 创建虚拟目录 环境准备: 系统:CentOS 7.4 软件:httpd-2.4.29 1.编辑主配置文件,添加命令运行子配置文件 vi /usr/local/httpd/conf/httpd.co ...
- C语言程序设计(基础)- 第14、15周作业
从本周开始,将作业标记为学校自然周,而不是开课的周数. 要求一(25经验值) 完成14.15周的所有PTA中题目集. 注意1:一周两次pta作业,包括四次. 要求二(50经验值) 博客的具体书写内容和 ...
- 庖丁解牛Linux内核学习笔记(1)--计算机是如何工作的
存储程序计算机模型 冯诺依曼体系结构 冯诺依曼体系结构是存储程序计算机,什么叫存储程序计算机?从硬件角度说,假设有cpu和内存,两者通过总线连接,在cpu内部有一个寄存器叫ip(instruction ...
- Java Client/Server 基础知识
Java的网络类库支持多种Internet协议,包括Telnet, FTP 和HTTP (WWW),与此相对应的Java网络类库的子类库为: Java.net Java.net.ftp Java. ...
- 20145237 《Java程序设计》第2周学习总结
教材学习内容总结 本周我学习了java的基础语法.分为类型.变量与运算符,流程控制. 一.类型:1.Java可以区分为基本类型和类类型.类类型也称作参考类型.2.Java中基本类型主要是整数.字节.浮 ...
- 201621123027 Week02-Java基本语法与类库
Week02-Java基本语法与类库 1.本周学习总结 关键词:基本语法,数据类型,包装类 本周讲了Java的基本数据类型和包装类: 数据类型主要分为八类(byte,short,int,long,do ...
- hadoop基础教程免费分享
提起Hadoop相信大家还是很陌生的,但大数据呢?大数据可是红遍每一个角落,大数据的到来为我们社会带来三方面变革:思维变革.商业变革.管理变革,各行业将大数据纳入企业日常配置已成必然之势.阿里巴巴创办 ...
- 服务器Windows Server 2008 远程控制安全设置技巧
为了保障服务器远程控制操作的安全性,Windows Server 2008系统特意在这方面进行了强化,新推出了许多安全防范功能,不过有的功能在默认状态下并没有启用,这需要我们自行动手,对该系统进行合适 ...
- 第一次制作和使用图标字体-IcoMoon
开题:之前就有所耳闻,最近两天第一次运用到图标字体.刚开始嘛,一脸懵逼的状态.成功运用之后就来记录一下使用过程咯! 1. 打开在线生成工具:https://icomoon.io/app/#/selec ...