java基本数据类型和引用数据类型
来源:互联网 发布:mysql insert安装教程 编辑:程序博客网 时间:2024/06/02 00:10
早上想到用 类的实例对象作为形参传入函数,如果在函数中改变了形参对象的属性值,那实参对象的属性值会不会也改变?
package new_start1;public class Test1 { class Person { public String name; public Person(String n) { this.name=n; } public Person(){} } public static void change(Person a)//改变对象a的name值 { a.name="haha"; } public static void main(String[] args) { Test1 t=new Test1(); Person p=t.new Person("zhangsan"); //实例一个对象p Person a=t.new Person();//又实例一个对象a a=p; System.out.println("两者哈希码值相同:"+a.hashCode()+" "+p.hashCode()); change(a);//改变a的属性值 System.out.println(p.name); }}
结论是会,因为是类是引用类型,传递的是地址,即传进来的形参是地址值,所以现在实参和形参共同指向同一块地址,哈希码值相同证明两者是相等的==,只要两者指向不变,修改地址上的值自然两者都改变.
后来我又试一下,那么Integer不也应该是类吗,那么Integer实例后的对象,调用change()后能否也跟上面的结果一样?
测试:
package new_start1;public class Test1 {public static void change(Integer aa)//改变{aa=100;}public static void main(String[] args) {Integer a=new Integer(1);change(a);System.out.println(a);//输出 1}}excese me?为什么main中的a还是没变,我明明在change中改变了a的值呀,其实并不是.
首先需要明确一个问题Integer是引用类型,这绝对没问题,只是我们理解错了aa=100这句代码的含义。
一开始,在调用函数change是,a与aa指向相同,都是Integer(1)
当执行aa=100后,其实就相当于执行了aa=new Integer(100),aa的指向已经改变,aa不等于a了所以改变aa的指向对象的值,并不影响main中的a
所以a还是等于1;
画图会更清楚:
ps:
基本数据类型有:char short int long float double boolean byte
引用类型有: array class(Integer Double Date....) interface
0 0
- Java数据类型(基本数据类型和引用数据类型)
- java中的基本数据类型和引用数据类型
- java中的基本数据类型和引用数据类型
- java基本数据类型和引用数据类型
- Java中基本数据类型和引用数据类型
- java中的基本数据类型和引用数据类型
- java中的基本数据类型和引用数据类型
- Java基本数据类型和引用数据类型
- java中基本数据类型和引用数据类型
- java基本数据类型和引用数据类型
- Java基本数据类型和引用数据类型
- java基本数据类型和引用数据类型
- java的基本数据类型和引用数据类型
- java基本数据类型和引用数据类型
- java中的基本数据类型和引用数据类型
- java 基本数据类型和引用数据类型
- JAVA的基本数据类型和引用数据类型
- Java基本数据类型和引用数据类型
- Becoming a ScrumMaster
- 建立一个内存分区,OSMemCreate()
- Linux如何查看进程,杀死进程、启动进程、查看日期、等常用命令
- IPMI的相关说明
- L1-048. 矩阵A乘以B
- java基本数据类型和引用数据类型
- Android Studio中JNI NDK开发(一)
- CSS overflow 属性
- java equals重写判断一个类的两个对象(摘自java从入门到精通)
- Android中Notification的使用
- 数据结构专题——线段树线段树
- debug.keystore的默认值
- 学习play_数据交互
- 172