java交换两个变量的值

1.幼儿园版

package tst;public class Test
{public static void main(String[] args){String x = "xx";String y = "yy";exchange(x, y);System.out.println();System.out.println(x+"<->"+y);}private static void exchange(String a, String b){String temp = a;a = b;b = temp;System.err.println(a+"<->"+b);System.err.println();}
}

显然,这个是错的

就从这个版本说起

1.java里方法的参数传递方式只有一种:值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响.

(是不是觉得自己已经明白为什么上面的程序是错误的了)

2.main方法中调用exchange方法时,main方法还未结束,因此main和exchange分配了两个展区.

所以实际上真正交换的只是exchange栈区中的,而main栈取中的没有改变

再看一个正确的版本

package tst;public class Test2
{public static void main(String[] args){PeopleName pname = new PeopleName();pname.firstname = "first";pname.lastname = "last";swap(pname);System.err.println(pname.toString());}private static void swap(PeopleName p){String temp = p.firstname;p.firstname = p.lastname;p.lastname = temp;System.out.println(p);}
}class PeopleName
{public String firstname;public String lastname;@Overridepublic String toString(){return "PeopleName [firstname=" + firstname + ", lastname=" + lastname+ "]";}}

创建一个对象时,内存中有两个实体:堆内存中保存了对象本身,栈里面存的是该对象的引用,

没有调用swap之前是这样的

调用时

由于值传递,swap的行惨也是一个指向堆的引用,这样他就可以操作堆,

这样就明白了吧

拓展

对象的复制

peopleName p1 = new peopleName();

p1.firstname = "qq";

p1.lastname = "ww";

peopleName p2 = p1;

p1.firstname = "ee";

此时P1,P2的firstname属性都是"ee",原因同上

最后一个很常用的情景,就是从resutlset取对象,这个对象应该在循环外面初始化,还是在循环里面初始ua的问题,答案是在里面(提示用new的初始化会分配内存)

原因同上

1.方法的传递机制

升级版面试题

http://www.2cto.com/kf/201607/528019.html

转载于:https://www.cnblogs.com/rocky-AGE-24/p/5528992.html

java 中变量的存储与引用相关推荐

  1. JAVA中是传值还是传引用?回答KEZHANG问题

    首先,推荐对Java有一定理解的同仁一本书<Practical Java>.在<Practical Java>中也有一个章节介绍Java中关于传值和传引用的问题,堪称经典. & ...

  2. 【Java基础】Java中的值传递、引用传递

    Java中的值传递.引用传递 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己.--<Java编程思想> 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本 ...

  3. JAVA中变量的存放位置

    JAVA中变量的存放位置 一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所 在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该 ...

  4. 一文彻底搞懂Java中的值传递和引用传递!

    关于Java中方法间的参数传递到底是怎样的.为什么很多人说Java只有值传递等问题,一直困惑着很多人,甚至我在面试的时候问过很多有丰富经验的开发者,他们也很难解释的很清楚. 我很久也写过一篇文章,我当 ...

  5. Java中的对象类型像引用还是指针,谁是谁非?

    Java中的对象类型像引用还是指针,谁是谁非? 作者:海枫 地址:http://blog.csdn.net/linyt 作为一名程序员,我们应该对新知识和新技术刨根问底,而不应泛泛而谈.我未曾接触到J ...

  6. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  7. 7.Java中变量的隐式转换以及强类型转换

    1.变量的相加,(变量的数据类型一致),直接运算即可!          结论:         Java中变量的 隐式转换(数据类型的默认类型提升)         byte,short,char- ...

  8. java中变量的作用域

    java中变量的作用域 变量一定会被定义在某一对大括号中,该大括号所包含的代码区便是这个变量的作用域.变量分为四个级块:类级 ,对象实例级 ,方法级 ,块级 类级:所谓的全局变量,需要使用static ...

  9. Java中的强软弱虚引用《对Java的分析总结三》

    <对Java的分析总结>-Java中的强软弱虚引用 强引用 StrongReference 软引用 SoftReference 弱引用 WeakReference 虚引用 PlantomR ...

最新文章

  1. 怎样的视频监控的管理与运营才算高效
  2. char类型怎么输入 c语言_还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)...
  3. 领歌leangoo敏捷工具个人工作台功能
  4. python range()内建函数
  5. 模拟微信自动化发送(微信公众号文章自动点击)
  6. 新兴的多媒体格式——MXF 文件格式分析 和简介
  7. 【BZOJ1965】【codevs1446】洗牌,快速幂+扩展欧几里德
  8. 浅谈UWB室内定位(三)_vortex_新浪博客
  9. 布局的几种方式(静态布局、自适应布局、流式布局、响应式布局、弹性布局)...
  10. 百度文库下载器Python实现
  11. 如何评估互联网广告效果
  12. 降维(Dimensionality Reduction) 是机器学习中的一种重要的特征处理手段
  13. xargs -i参数详解
  14. 网易互娱2017实习生招聘在线笔试第一场-题目3
  15. 使用VB合并word文档内容
  16. 热辊的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. maven 排除配置文件打包_maven 打包排除配置文件
  18. Java -- 如何解决某些情况下,前台向后台传参时,alert 等敏感字符被和谐
  19. android spinner,自定义字体大小颜色背景位置
  20. concurrentHashMap代码走读 chm走读

热门文章

  1. java velocity是什么意思,什么是Apache Velocity?
  2. java 类型 字节_Java数据类型-字节
  3. mysql添加另一个表的某条数据库,在MySQL中,如何将一个表的内容复制到同一个数据库中的另一个表?...
  4. android 骨架屏刷新动画,ios - 原生骨架屏,网络加载过渡动画的封装
  5. linux压缩命令 实例子,Linux下的tar压缩解压缩命令详解及使用实例分析
  6. javaweb k8s_K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程...
  7. 一次Ping1000个IP会怎么样?
  8. 【云原生AI】Fluid + JindoFS 助力微博海量小文件模型训练速度提升 18 倍
  9. 使用函数计算三步实现深度学习 AI 推理在线服务
  10. 查看go 安装了哪些包_如何灵活地进行 Go 版本管理