day02(难点)
难点:
第一个问题:方法形参中引用类型传地址,基本数据类型传值
package oop;
import java.util.Arrays;
/**
*引用类型传地址,基本数据类型传值
*/
public class ClassDemo6 {
public static void main(String[] args) {
int num=10;
ClassDemo6 demo6=new ClassDemo6();
demo6.updateNum(num);
//输出得num=10,基本数据类型传得值
System.out.println(num);
System.out.println("###################");
int [] arr={1,2,3};
demo6.updateArray(arr);
//循环输入数组中得元素arr={4,5,6},引用数据类型传得地址,arr还是指向{4,5,6}地址
System.out.println(Arrays.toString(arr));
System.out.println("###################");
Person p1=new Person("小红",5);
demo6.updateObject(p1);
//输出得应该是"小明;18"
System.out.println(p1.name+";"+p1.age);
}
void updateNum(int num){
num=10;
}
void updateArray(int [] arr){
arr[0]=4;
arr[1]=5;
arr[2]=6;
}
void updateObject(Person person){
person.name="小明";
person.age=18;
}
}
第二个问题:打印内存对象地址问题
package oop;
/**
* 打印对象内存地址得问题
*/
public class ClassDemo7 {
public static void main(String[] args) {
int num1=127;
/**
* 1、public static native int identityHashCode(Object x); identityHashCode()形参时一个对象
* 2、通过class执行得字节码,我们得出num通过Integer.valueOf()转换成对象,传入identityHashCode()
*当num得值没有超过它得范围时,第二次取得时缓存值,所以两个值时一样得。
*/
System.out.println(System.identityHashCode(num1));
System.out.println(System.identityHashCode(num1));
int num2=1024;
/**
* num值超过了int得范围,会生成两个不同得对象放在堆中,所有下面两个地址值不一样
*/
System.out.println(System.identityHashCode(num2));
System.out.println(System.identityHashCode(num2));
}
}