java值传递和引用传递的理解
java的基础数据类型有:(byte、short、int、long、float、double、char、boolean)八种
基础数据都是值传递,其他都是引用传递。但是引用传递要特别注意:String Integer Double等这几个类型,以下以String为例。
举例说明:
public static void main(String[] args) {
String a="zkj";
System.out.println("str :");
strTest(a);
System.out.println("str :");
}
public static void strTest(String b){ //这里b的地址指向main方法中a的地址
b="hello,"+b; //这里虽然也是引用传递,但是这里等于是新建了对象,并把地址指向这里的b
System.out.println(b);
}
打印:
str : zkj
str : zkj
这里String是引用传递,但是调用strTest方法后,执行:
b="hello,"+b; 看似改变了传入的参数,但是其实是由于新建了一个string对象,所以内存中存在a:zkj,b:hello zkj,两个地址,所以这时候a的值还是 不变的。 其他的情况:
public class Main { public static void main(String[] args) { String a="zkj";
System.out.println("str :");
strTest(a);
System.out.println("str :"); StringBuffer sb=new StringBuffer("zkj,");
objTest(sb);
System.out.println("obj :"+sb.toString()); final StringBuffer s=new StringBuffer("aa");
System.out.println(s);
s.append("bb");
System.out.println(s); } public static void strTest(String b){ //这里b的地址指向main方法中a的地址
b="hello,"+b; //这里虽然也是引用传递,但是这里等于是新建了对象,并把地址指向这里的b
System.out.println(b);
} public static void objTest(StringBuffer a){
a.append("hahah");
System.out.println(a.toString());
} }
这里打印:
zkj,hahah
新增了一个StringBuffer对象sb,学习过jvm的就了解,这里会在栈中生成一个sb,堆中生成一个“zkj,”对象,sb引用这个堆中的地址。调用ojbTest方法后,sb新增了字符串hahah,堆中的sb对象增加了这个string.
那什么时候可以像上例中String赋值一样,sb的值保持不变呢?
很简单,类似上例,我们也新建一个对象。 在ojbTest中。
public static void objTest(StringBuffer a){
a=new StringBuffer();
a.append("hahah");
System.out.println(a.toString());
}
这样main中就会打印: zkj,
解释如同上例。
java值传递和引用传递的理解的更多相关文章
- 理解java值传递与引用传递
1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型.基本类型的变量保存原始值,即它代表的值就是数值本身:而引用类型的变 ...
- 堆栈详解 + 彻底理解Java的值传递和引用传递
本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨 ...
- JAVA不可变类与可变类、值传递与引用传递深入理解
一个由try...catch...finally引出的思考,在前面已经初步了解过不可变与可变.值传递与引用传递,在这里再次深入理解. 1.先看下面一个try..catch..finally的例子: P ...
- 理解java中的值传递与“引用传递”
额....java中其实没有引用传递 对于引用类型 ,在调用方法后,直接拷贝了引用的副本,但是它们指向了相同的堆地址,所以看起来像引用传递,但其实是值传递,只不过传递的引用的副本. 说一说为什么Str ...
- Java中引用类型变量,对象,值类型,值传递,引用传递 区别与定义
一.Java中什么叫做引用类型变量?引用:就是按内存地址查询 比如:String s = new String();这个其实是在栈内存里分配一块内存空间为s,在堆内存里new了一个Stri ...
- java中值传递和引用传递
最近工作中使用到了值传递和引用传递,但是有点懵,现在看了下面的文章后清晰多了.一下是文章(网摘) 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...
- Java中的值传递和引用传递
这几天一直再纠结这个问题,今天看了这篇文章有点思路了,这跟C++里函数参数为引用.指针还是有很大区别. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里 ...
- java的值传递和引用传递
昨天博主在对于值传递和引用传递这里栽了一个大坑啊,导致一下午时间都浪费在这里,我们先说下值传递和引用传递java官方解释: 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对 ...
- java中方法的参数传递机制(值传递还是引用传递)
看到一个java面试题: 问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参 ...
- java 对象传递 是 值传递 还是 引用传递?
这个问题说实话我感觉没有太大的意义. 按第一印象和c++的一些思想去理解的话对象传递是引用传递,因为传递过去的对象的值能被改变. 但是又有很多人,不知道从哪里扣出来一句,java中只有值传递,没有引用 ...
随机推荐
- mysql插入、修改、删除
联合查询: union:合并.联合,将多次查询结果合并成一个结果 语法: 查询语句1: union[all] 查询语句2: union [all] ... 意义 1.将一条比较复杂的查询语句可拆分成多 ...
- Linux磁盘与文件管理系统
基本上Linux的正统文件系统为Ext2,该文件系统内的信息主要有: superblock:记录此filesystem的整体信息,包括inode/block的总量,使用量,剩余量,以及文件系统的格式与 ...
- 图说不为人知的IT传奇故事-4-王安用一生来跟IBM抗衡
此系列文章为“图说不为人知的IT传奇故事”,各位大忙人可以在一分钟甚至几秒内了解把握整个内容,真可谓“大忙人的福利”呀!!希望各位IT界的朋友在钻研技术的同时,也能在文学.历史上有所把握.了解这些故事 ...
- IOS开发学习笔记028-UITableView单组数据显示代码优化
1.如果表格中又几百条数据的话,系统会自动加载显示在界面上得数据,逐一加载 添加100个数据到UITableView中 ; i < ; i ++) { NSString *icon = [NSS ...
- python学习_运算
1.数据类型 1.1数字 整型int,如2 浮点型float,如3.14和314E-2 复数complex,如(-5+4) 1.2布尔值 真或假 1或0 1.3字符串 'hello world' 2. ...
- HDU3977 Evil teacher 求fib数列模p的最小循环节
In the math class, the evil teacher gave you one unprecedented problem! Here f(n) is the n-th fibona ...
- [译]如何检查python中的值是否为nan?
float('nan')是Nan不是一个数字,我该如何判断一个值为nan,有什么简单的方法么? 使用math.isnan()来进行判断 >>> import math >> ...
- 如何获取JavaCard剩余空间
0x01应用场景 获取JavaCard卡内剩余空间,一方面是在评估一张卡的时候需要用到,另一方面是在应用个人化或者运行时需要用到. 例如:应用提供商为了保证自己的应用在卡内运行期间能够不受空间影响,一 ...
- 【bzoj3555】[Ctsc2014]企鹅QQ 字符串hash
题目描述 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体 ...
- hihoCoder [Offer收割]编程练习赛83 D 生成树问题
题目 从 Kruskal 算法的角度来思考这个问题. 考虑 $n$ 个点的"空图"(即没有边的图). 先将 $m_2$ 条无权值的边加到图中,得到一个森林. 按边权从小到大的顺序枚 ...