public class Demo02{
public static void main(string[] args) {
Person p = new Person( 18,"张三");
system.out.println("调用参数之前:" + p);
call(p);//p这里为实参
system.out.println("调用参数之后:" + p);
}
public static void call(Person person){
person.setAge(20);//person.age=this.age=age=20
person.setName("李四");
}
}
class Person{
private int age;
private String name;
public Person(int age,string name) {
this.age = age; // p.age=this.age=age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
//调用参数之前:Person [age=18,name=张三]
//调用参数之后:Person [age=20,name=李四]
public class Main {
public static void main(String[] args) {
Person p = new Person();
String[] fullname = new String[] { "Homer", "Simpson" };
p.setName(fullname); // 传入fullname数组
System.out.println(p.getName()); // "Homer Simpson"
fullname[0] = "Bart"; // fullname数组的第一个元素修改为"Bart"
System.out.println(p.getName()); // "Homer Simpson"还是"Bart Simpson"?
}
}
class Person {
private String[] name;
public String getName() {
return this.name[0] + " " + this.name[1];
}
public void setName(String[] name) {
this.name = name;
}
}
new运算符实例化一个类对象,通过给这个对象分配内存并返回一个指向该内存的引用。new运算符也调用了对象的构造函数。
注意:“实例化一个类的对象”的意思就是“创建对象”。创建对象时,你正在创造一个类的“实例”,因而“实例化”一个类的对象。
new运算符需要一个单一的,后缀参数,需要调用构造函数。构造函数的名称提供了需要实例化类的名称。
new运算符返回它所创建的对象的引用。此引用通常被分配给一个合适的类型的变量,如:Point originone =new Point(23,94);
由new运算符返回的引用可以不需要被赋值给变量。它也可以直接使用在一个表达式中。例如: int height = new Rectangle().height;
1、首先我们的类的对象的类型有强类型、弱类型等,但凡new出来的对象都是强类型,目的是在垃圾回收的时候起作用,一旦new了,由于java的安全性,他就不会变化。
2、再次new就是另外一个对象了,当然地址也会变化。不仅仅只有new,还有赋值,比如Person p = new Person(0,""); person = p;也会变化
3、执行这句话(fullname[0] = "Bart")的意思是原来的"Homer"字符串对应的地址比如0x88指向fullname[0],但是fullname[0] = "Bart"了,那么"Bart"对应的地址比如0x99就指向了fullname[0],原来的"Homer"地址就在下一次GC时被回收