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):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参 ...
随机推荐
- Redis --> Redis的接口介绍及使用
Redis的接口介绍及使用 Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然 ...
- Konckout第五个实例:各种事件绑定
点击加一: <!doctype html> <html > <head> <meta http-equiv="Content-Type" ...
- kvm之四:从网上镜像安装虚拟机Centos6.8
1.再加块硬盘,格式化挂载至新建目录/kvm2下 2.CentOS 6.8镜像地址 http://mirrors.163.com/centos/6.8/os/x86_64/ 3.配置安装参数,执行安装 ...
- Vue的组件
1,局部组件就是在Vue对象内部注册的构造器 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- jmeter 前置处理器提取用户cookie信息 比如jsessionid
一般登录过程分成两步,一步是打开登录页面, 一步是输入用户名和密码登录 现在B/S架构的系统好多时候都只在客户端的cookie信息保留一个jsessionId,然后每次请求的时候在请求的头信息的coo ...
- 使用Java编译思想
1.Java常见的注释有哪些,语法是怎样的? 1)单行注释用//表示,编译器看到//会忽略该行//后的所文本 2)多行注释/* */表示,编译器看到/*时会搜索接下来的*/,忽略掉/* */之间的文本 ...
- 仿京东树形菜单插件hovertree
hovertree是一个仿京东的树形菜单jquery插件,暂时有银色和绿色两种. 官方网址:http://keleyi.com/jq/hovertree/欢迎下载使用 查看绿色效果:http://ke ...
- Java虚拟机16:Metaspace
被废弃的持久代 想起之前面试的时候有面试官问起过我一个问题:Java 8为什么要废弃持久代即Metaspace的作用.由于当时使用的Java 7且研究重心不在JVM上,一下没有回答上来,今天突然想起这 ...
- JavaScript(第二十二天)【动态加载js和css】
学习要点: 1.元素位置 2.动态脚本 3.动态样式 本章主要讲解上一章剩余的获取位置的DOM方法.动态加载脚本和样式. 一.元素位置 上一章已经通过几组属性可以获取元素所需的位置,那么这节课补充 ...
- HIVE使用mysql作为外置数据库配置详情
Hive安装配置(mysql) 安装mysql hadoop$:sudo apt-get update hadoop$:sudo apt-get install mysql-server 启动mysq ...