java 的值传递与引用传递的区别、== 和 equals 的区别
参与志愿活动,将善意传递给社区 #生活乐趣# #心理健康乐趣# #正能量传递#
值传递是传递变量的值,并不会改变方法外变量的值
public test (int b){ println(b) int b=0; println(b) } public void main[String arg]{ int i =1; test(i) println(i) }12345678910
输出 1、0、1
引用传递是传递对象的地址,会改变对象本身的值
void swap3(int &x, int &y) { int tmp=x; x=y; y=tmp; print(“x=%d, y=%d\n”, x, y); } void main() { int a=2; int b=7; swap3(a,b); Print(“a=%d, b=%d\n”, a, b); } 123456789101112131415
x=7, y=2
a=7, b=2
一般基础数据类型传递都是值传递
对象传递和String类型是引用传递
== 和 equals 的区别
关于比较一般是基础数据类型比较和对象比较
基础数据类型存储在jvm的栈中,即==和equals比较是变量的值,值相同则相同,值不同则不同
对于引用类型来说,对象的内容存储在jvm的堆中,栈只是存储对象的引用(地址),无论是==还是equals比较的都是栈中的内容,即对象的引用。
根据创建对象的方式分为两种情况:
一种是用表达式创建:
一种是用new 创建:
1.为什么表达式创建和new创建,会让==比较产生不同的结果。
这是因为jvm在程序运行的时候会创建一个缓冲池,当使用表达式创建的时候,程序会在缓冲池中寻找相同值的对象,如果找到,就把这个对象的地址赋给当前创 建的对象,因此,c和d实际上都指向了c的引用。因此在使用==时会返回true。
当用new创建对象时,是在堆中重新分配内存,因此栈中的引用是不相同的,所以,a和b引用的是值相同的不同对象。所以a==b返回false
2.既然equals比较的是引用,那么a.equals(b)为什么返回true。这是因为在Integer里,重写了equals方法!
网址:java 的值传递与引用传递的区别、== 和 equals 的区别 https://www.yuejiaxmz.com/news/view/219055
相关内容
==和equals的区别C#中 Equals和= =的区别
物流和快递的区别
String的比较,“==”比较,equals()比较
绿色传递,低碳生活
String类的equals方法和==方法的比较
“传递爱心
传递温暖与健康 南京洲泰社区开展中医艾灸讲座活动
工作与家庭冲突:压力的交叉传递效应(理论进展)
人人公益,爱心传递