黑马程序员技术交流社区
标题: 这个函数的结果求解释下 [打印本页]
作者: 沈子豪 时间: 2013-3-15 21:01
标题: 这个函数的结果求解释下
本帖最后由 沈子豪 于 2013-3-15 22:28 编辑
这个函数的运行结果不太能理解
public class Test6 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:" + a + ",b:" + b);//a:10,b:20
change(a, b);
System.out.println("a:" + a + ",b:" + b);//a:10,b:20 System.out.println("********************************") int[] arr = { 1, 2, 3, 4, 5 };
change(arr);
System.out.println("arr[1]" + arr[1]);//4 }
public static void change(int[] arr) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] % 2 == 0) {
arr[x] *= 2;
}
}
}
public static void change(int a, int b) {
System.out.println("a:" + a + ",b:" + b);//a:10,b:20
a = b;
b = a + b;
System.out.println("a:" + a + ",b:" + b);//a:20,b:40
}
}
作者: wangjinyu501 时间: 2013-3-15 21:10
这个类里面你定义了两个静态函数
第一个函数是对数组进行操作,如果某一个数组元素能被2整除,那么这个元素的值就乘以2,所以运行完这个函数,被2整除的数组元素全部加倍。
第二个函数就是简单的赋值,先将参数b的值赋给a,之后b的值就是2b了。{:soso_e128:}
作者: 马甲大王 时间: 2013-3-15 21:19
我给你加了注释,希望帮助到你- public class Test {
- public static void main(String[] args) {
- int a = 10;
- int b = 20;
- System.out.println("a:" + a + ",b:" + b);//a:10,b:20
- change(a, b);//调用change方法
- System.out.println("a:" + a + ",b:" + b);//a:10,b:20 还是原来的数据
- System.out.println("********************************") ;
- int[] arr = { 1, 2, 3, 4, 5 };
- change(arr);
-
- /*
- * 这里的arr[1] 原来是2,所以符合转换方法要求,就乘以2结果就得4
- */
- System.out.println("arr[1]" + arr[1]);
- }
-
-
- public static void change(int[] arr) {
- //遍历数组
- for (int x = 0; x < arr.length; x++) {
- //如果数组里的值为2的整数倍,则原来的值乘以二
- if (arr[x] % 2 == 0) {
- arr[x] *= 2;
- }
- }
- }
- public static void change(int a, int b) {
- //先打印原来的数 的值
- System.out.println("a:" + a + ",b:" + b);//a:10,b:20
- a = b;//把b的值赋给a,则a=20
- b = a + b;//这里a已经是20,再加上b的20赋给b,就得到b=40
- System.out.println("a:" + a + ",b:" + b);//a:20,b:40
- }
- }
复制代码
作者: 刘辉 时间: 2013-3-15 21:23
主要是基本数据类型和引用数据类型的区别
public class Test6 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:" + a + ",b:" + b);//a:10,b:20
change(a, b);
System.out.println("a:" + a + ",b:" + b);//a:10,b:20,change函数运算结束弹栈了,所以结果还是a:10,b:20
System.out.println("********************************") int[] arr = { 1, 2, 3, 4, 5 };
change(arr);
System.out.println("arr[1]" + arr[1]);//4,数组存储在堆内存中,相当于指向的是其地址值,而地址值没有变化,所以返回了运算后的结果
}
public static void change(int[] arr) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] % 2 == 0) {
arr[x] *= 2;
}
}
}
public static void change(int a, int b) {
System.out.println("a:" + a + ",b:" + b);//a:10,b:20
a = b;
b = a + b;
System.out.println("a:" + a + ",b:" + b);//a:20,b:40
}
}
参数的问题:
基本数据类型:形参的改变对实参没有影响
引用数据类型:形参的改变直接影响实参.
作者: jdzzlf 时间: 2013-3-15 21:30
(一)基本数据类型:传值,方法不会改变实参的值。- public class TestFun {
- public static void testInt(int i){
- i=5;
- }
- public static void main(String[] args) {
- int a=0 ;
- TestFun.testInt(a);
- System.out.println("a="+a);
- }
- }
复制代码 程序执行结果:a=0 。
(二)传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。- public static void main(String[] args)
- {
- int temp[]={1,3,5};
- fun(temp);
- for(int i=0;i<temp.length;i++)
- System.out.println(temp[i]);
- }
- public void fun(int x[])
- {
- x[0]=6;
- }
复制代码 结果为:6,3,5.
因为数组是引用类型,所以方法本身没有任何返回值,修改后的结果也会被保存下来。
总结:
第一:形参不会改变实参的值。
第二:数组引用类型,改变了堆内存中的内容,因此会保存下来。
你不明白的地方,也许就是对实参、形参,引用类型的传值不太明白吧?
作者: itserious 时间: 2013-3-15 21:43
public class Test6 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:" + a + ",b:" + b);//a:10,b:20
change(a, b);
System.out.println("a:" + a + ",b:" + b);//a:10,b:20 System.out.println("********************************") int[] arr = { 1, 2, 3, 4, 5 };
int [] arr=new int[]{1,2,3,4,5,6};//定义一个数组。
change(arr);// 你的代码中arr还没有定义,请先定义一个数组。不然会提示 arr cannot be resolved to a variable
//chang(arr),将数组arr中的所有偶数乘以2 。 所以后面的arr[1]的值 由2 变成 2*2==4
System.out.println("arr[1]" + arr[1]);// arr[1]==4,所以结果:arr[1]4
}
public static void change(int[] arr) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] % 2 == 0) {//遍历数组 arr中的每一个元素。并判继是否为偶数。
arr[x] *= 2;//等价于 arr[x]=arr[x]*2 将数组中的所有偶数乘以2
}
}
}
public static void change(int a, int b) {
System.out.println("a:" + a + ",b:" + b);//a:10,b:20
a = b; //a==b,b==b 所以,a:20,b:20
b = a + b;// b=b+b--->b=20+20; 所以,a:20,b:40
System.out.println("a:" + a + ",b:" + b);//a:20,b:40
}
}
结果:
a:10,b:20
a:10,b:20
a:20,b:40
a:10,b:20
arr[1]4
作者: 月时微 时间: 2013-6-17 19:09
基本数据类型有8种,byte,char,int,float,short,double,long,boolean.其他的都是引用类型。顾名思义,引用类型的实例在栈中,保存的是数据在堆中的物理地址,只是一个“引用”。就相当于一个箭头,指向堆中的数据一样。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |