从leetcode 88题 思考Java中引用与传值问题

从leetcode 88题 思考Java中引用与传值问题

函数如下 给定nums1与nums2 将两个数组合并并将结果放到nums1中。

 public void merge(int[] nums1, int m, int[] nums2, int n) {
          int[] tar=new int[m+n];
	        int count=0;
	        int i=0;
	        int j=0;
	        while(count<(m+n)) {
	        	if(nums1[i]>=nums2[j]||i>=m) {
	        		tar[count]=nums2[j];
	        		count++;
	        		j++;
	        	}else if(nums1[i]<nums2[j]||j>=n) {
	        		tar[count]=nums1[i];
	        		i++;
	        		count++;
	        	}
	        }
	        
	        
	        nums1=tar.clone();

	        for(int xx=0;xx<tar.length;xx++) {
	        	nums1[xx]=tar[xx];
	        }
    }

如上述代码块 当我得到目标tar数组后 将tar赋给nums1数组后 发现nums1数组并未改变。
(因为之前都习惯 return 回去 或者一些其他解决方法 所以之前未对此问题想过太多)
最后测试 传值

 public void changer(int x) {
	    	x=10;
	    	System.out.println("函数中修改:"+x);
	    }
//main中
		int a=0;
		System.out.println("a: "+a);
		h.changer(a);
		System.out.println("a1: "+a);

最后输出结果:
a: 0
函数中修改:10
a1: 0

但Java中没有C中的引用与传值方式。且Java参数传递只有传值方式

传值即:在函数传值过程中 在函数外改变他的值。只有引用会改变。

1.java只有按值传递,所谓的按地址(引用)传递,也属于按值传递,只不过这个“值”是个地址;

2.对于引用类型的传参也是传值的,传的是引用类型的值,其实就是对象的地址;

1.java参数是传递值的。
2.java所有对像变量都是对像的引用;

3.或者说:传递过去的都是拷贝,区别在于拷贝的是基本数据类型还是引用;

4.函数的形式参数,是传入参数的拷贝;引用变量之间拷贝的是【地址】,基本变量之间拷贝的是 内存中的值 (被称为直接量);
7.对象本身,与对象的地址 是2个东西,函数之间如果想【传递对象】,只能通过传递对象的地址来实现;

下次再写 关于上述函数问题的解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值