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)
}

输出 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);  
}  

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方法!
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值