为什么用本人写的方法赋值后,值未发生改变?(自学中,求高手指点,代码在内容里)

J2EE 码拜 8年前 (2016-09-11) 990次浏览
方法:
public static void column_check(int form[][],boolean finnal_result)
{
for (int zong=0;zong<form.length ;zong++)
{
sum =0;
for(int heng=0;heng<form[zong].length;heng++)
{
sum +=form[zong][heng];
};
if (sum>2)
{
System.out.println(“第”+(zong+1)+”行出错”);
finnal_result=false;
System.out.println(finnal_result);
}
else{};
};
};
public static void print_result(boolean finnal_result)
{
if (finnal_result)
{
System.out.println(“success”);
}else{};
}
运行的部分是这样子的:
public class Main_test
{
public static void main(String[] args)
{
int [][] i1=
{
{1,1,1},
{1,1,1},
{1,1,1}
};
boolean b1=true;
The_test_of_test37.printform(i1);
The_test_of_test37.column_check(i1,b1);
System.out.println(b1);
The_test_of_test37.print_result(b1);
}
}
结果是这样的:
| 1 || 1 || 1 |
| 1 || 1 || 1 |
| 1 || 1 || 1 |
第1行出错
false
第2行出错
false
第3行出错
false
true
success
解决方案

10

public static void column_check(int form[][],boolean finnal_result)
boolean 是基本数据类型,按值传递,方法体里的操作不会影响源变量的值
关于按值传递和按引用传递
http://blog.csdn.net/zw_2011/article/details/6431448

40

java中只存在值传递
java中方法参数的使用情况有三点要注意:
①.一个方法不能修改一个基本数据类型的参数(数值型,布尔型等)
②.一个方法可以改变一个对象的参数
③.一个方法不能让对象参数引用一个新的对象
回到问题,值未发生改变的原因是原因是①。你要使变量的值改变应该使用②。可以构造一个类的对象,在对象里赋值即可。

public class TestSwap {
	public static void swap(DataSwap d){
		int temp = d.a;
		d.a = d.b;
		d.b = temp;
	}
	public static void main(String[] args) {
		DataSwap ds = new DataSwap();
		ds.a = 10;
		ds.b = 30;
		swap(ds);
		System.out.println(ds);
	}
}
class DataSwap{
	public int a;
	public int b;
	@Override
	public String toString() {
		return "DataSwap [a=" + a + ", b=" + b + "]";
	}
}

给你一个可以交换两个值的例子,体会下。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么用本人写的方法赋值后,值未发生改变?(自学中,求高手指点,代码在内容里)
喜欢 (0)
[1034331897@qq.com]
分享 (0)