12.
class ValueTest1{
public static void main(String [] args){
int num = 10;
System.out.println("方法调用前num的值\t"+num);//10
changeValue(num);
System.out.println("方法调用后num的值\t"+num);//10
}
public static void changeValue(intnum){//int num = num
num = 20;
System.out.println("方法调用中num的值\t"+num);//20
}
}
13.
class ValueTest2{
publicstatic void main(String [] args){
String[]student = new String[3];
for(inti = 0;i<student.length;i++){
student[i]= "范冰冰";
}
intnum = 10;
for(Strings:student){
System.out.println(s);
}
System.out.println("方法调用前\t"+student[0]);//范冰冰
changeValue(student);
System.out.println("方法调用后\t"+student[0]);//周杰伦
}
//声明方法
publicstatic void changeValue(String[] student){
student[0]= "周杰伦";
student[1]= "周杰";
System.out.println("方法调用中\t"+student[0]);//周杰伦
}
}
总结:
1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。
2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。
3、方法体内对参数进行运算,不影响原有变量的值。
4、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。
也就是说,对于基本数据类型,实现的是传值,只是个形参,不会改变原有值。对于引用数据类型,对这个引用进行操作,其实也是相当于对形参的操作,不会改变原来的引用。但是,当对这个引用的属性进行操作的时候,相当于CPP中的传址调用,可以改变这个引用的属性的值。
Eg:
public class Main {
private static voidgetMiddleOne(boolean b, Boolean boo, Boolean[] arr){
b = true; //形参,不会改变原有值
boo = newBoolean(true); //引用变量的直接操作相当于值传递,不会改变原来的引用变量
arr[0] = true; //引用变量的属性的操作,会改变原有引用的属性,相当于传址调用
}
//测试
public static voidmain(String[] args) {
boolean b = false;
Boolean boo = newBoolean(false);
Boolean[] arr = newBoolean[]{false};
getMiddleOne(b, boo,arr);
System.out.println(b);
System.out.println(boo.toString());
System.out.println(arr[0]);
/**
* output:
* false
* false
* true
*/
}
}
14.
/*
流程控制语句深入
在循环外侧+label(可以自定义)
break label:label在哪里就结束哪层循环
continue:结束内层循环,继续外层循环
1234 1234 1234 1234 1234 1234 1234 1234 1234 1234
*/
class BreakTest{
public static void main(String [] args){
label:for(int i = 1;i<=10;i++){
for(int j = 1;j<=10;j++){
if(j==5){
//break ;
continue label;
}
System.out.print(j);
}
System.out.println();
}
}
}
15.
class JinZhi{
/*
将一个10进制的数转为二进制数
1.定义一个10进制数
2.除以2取余数 取商
3.将商作为被除数继续 取余数,取商
4.当商为0时终止
5.注意:result类型为String
*/
public static voidmain(String [] args){
//定义一个数
int num = 6;//110
String result ="";
//处理逻辑
while(num!=0){
//取余数
int yuShu =num%2;//0 , 1, 1
//让最后输出(最新的数据)的位于字符串的最前面
result =yuShu+result;//0+
System.out.println(result);
//取商
int shang =num/2;
//将商作为被除数
num =shang;
}
//输出解果
}
}