如何理解java的引用传递
1. 数组的引用传递
public class TestArray {
public static void changeAry1(int[] ary){
int[] ary1 = {9,9,9};
ary = ary1;
}
public static void changeAry2(int[] ary){
ary[0] = 100;
}
public static void main(String[] args) {
int[] ary = {1,2,3};
System.out.println(Arrays.toString(ary));
changeAry1(ary);
System.out.println(Arrays.toString(ary));
changeAry2(ary);
System.out.println(Arrays.toString(ary));
}
}
2. 对象的引用传递
public class TestObject {
public static void change1(Person p){
p = new TestObject().new Person();
p.age= 100;
p.name = "Lily";
}
public static void change2(Person p){
Person pNew = new TestObject().new Person();
pNew.age= 200;
pNew.name = "Mary";
p = pNew;
}
public static void change3(Person p){
p.age= 200;
p.name = "Tomy";
}
public static void main(String[] args) {
Person p = new TestObject().new Person();
p.age = 50;
p.name="John";
change1(p);
System.out.println(p);
change2(p);
System.out.println(p);
change3(p);
System.out.println(p);
}
class Person{
private int age;
private String name;
public String toString(){
return this.age+","+this.name;
}
}
}
3. 再写一个jdk自带类的引用传递
public class TestOtherObject {
public static void change1(List list){
list = null;
}
public static void change2(List list){
list.add(null);
}
public static void main(String[] args) {
List list = new ArrayList();
change1(list);
System.out.println(list.size());
change2(list);
System.out.println(list.size());
}
}
4. 字符串也是引用类型,也是引用传递
public class TestString {
public static void changeStr1(String str){
String newValue = "changeValue";
str = newValue;
// 或者直接str = "changeValue"; 也是一样
}
public static String changeStr2(String str){
str = "changeValue";
return str;
} public static void main(String[] args) {
String str = "hello";
System.out.println(str);
changeStr1(str);
System.out.println(str);
str = changeStr2(str);
System.out.println(str);
}
}
如何理解java的引用传递的更多相关文章
- Java Object 引用传递和值传递
Java Object 引用传递和值传递 @author ixenos Java没有引用传递: 除了在将参数传递给方法(或函数)的时候是"值传递",传递对象引用的副本,在任何用&q ...
- 如何理解Java的值传递
结论 为了加深印象,先把结论放在文章开头. ++Java中只有值传递++. 形参与实参 在理解Java的值传递 实参Argument 实际参数,主调用函数传递给调用函数的参数 形参Parameter ...
- Java参数引用传递之例外:null
今天写链表的时候写了一个函数,实参是一个空链表,应该是按引用传参,但是在函数内修改了链表,外部的链表没有变化. 原来是null作为参数传递的时候,就不是引用传参了. 引自:http://blog.cs ...
- Java没有引用传递机制,C#有。
Java没有引用传递机制,C#有: public class Obj { private Integer myValue; public Integer getMyValue() { return m ...
- 堆栈详解 + 彻底理解Java的值传递和引用传递
本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨 ...
- java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)
代码部分: public static void main(String[] args) { testInt(); testString(); testArray(); testX(); } publ ...
- Java中引用传递
//Java中的引用传递 class Ref1{ int temp = 10 ; String Str = "hello"; } public class HelloWorld { ...
- 有关java的引用传递,直接操作对象本身。直接删除BE的value中某值
HashSet<String> refRegions = BE.get(regionName); HashSet<String> values = new HashSet ...
- 理解Java的引用对象
SoftReferenceWeakReference 的特性基本一致, 最大的区别在于 SoftReference会尽可能长的保留引用,不会在GC时就回收对象,而是直到JVM 内存不足时才会被回收(虚 ...
随机推荐
- Linq skip skipwhile take takewhile
一.Skip()跳过 static void Main(string[] args) { //skip()跳过 ,,,,,,,,,}; //跳过3条 nums.Skip().ToList().ForE ...
- MySQL出现Errcode:28错误提示解决办法
mysql出现Error writing file \'xxx\'( Errcode:28)的原因有很多种,下面我来总结一些常用的关于引起Errcode:28错误原因与解决方法. 问题一,是log ...
- VVDocumenter安装过程的一些问题
vvdocument是瞄神写的一个插件 作用的话大家都知道 这里就不多说了 插件下载地址:https://github.com/onevcat/VVDocumenter-Xcode 1.下载后解压 编 ...
- Mysql转化blob为可读
-- info 为列名 SELECT convert(info using latin1) FROM drupal755.system; SELECT convert(info using utf8) ...
- 不同版本(2.3,2.4,2.5) web.xml 的web-app头信息
原址:点击打开链接 Servlet 2.3 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE w ...
- TCP的四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接.收到一个 FIN只意味着这一方向上没有数据流动, 一个TCP连接 ...
- USB鼠标线序
鼠标线断了,找了个废弃的手机充电线接上,特记录线序如下: 红————白 白————橙绿————绿黑————蓝
- Android中布局文件中使用onClick属性
安卓开发中,布局文件中的控件有一个属性,是onClick,例如: <Button android:id="@+id/button1" ...
- Lucene4.X 高级应用
Lucene 简介以及使用 Lucene, 一个基于 Java 的开源的全文搜索工具包,可以方便的嵌入到各种应用系统中,实现针对应用的全文索引以及检索功能.目前是 Apache jakarta 项目 ...
- Vim编辑器的使用和基本配置
三种模式 1 命令模式 插入 a i o A I O 定位 gg G :n nG ngg $ 0 删除 x nx dd ndd dG 复制和剪切 yy-p dd-p 替换 r R 撤销和恢复 u Ct ...