- 一个Java程序中可以有多个main方法,但是一个类最多一个main方法,但是最终运行的时候只能选择其中的一个作为程序的入口
- java中只有值传递。程序设计语言中关于实参传递给形参有两种方式,一种是按值调用(call by value):方法接收的是调用者提供的值,也就是说,形参的值是实参的copy,副本。按引用调用(call by reference)表示方法接收的是调用者提供的变量地址,就是直接将地址变量赋值给形参。
一个方法可以修改传递引用(包括copy引用和引用调用)所对应的变量值,而不能修改传递值调用(copy值)所对应的变量值。
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s1 = new Student("小张");
Student s2 = new Student("小李");
Test.swap(s1, s2);
System.out.println("s1:" + s1.getName());
System.out.println("s2:" + s2.getName());
}
public static void swap(Student x, Student y) {
Student temp = x;
x = y;
y = temp;
System.out.println("x:" + x.getName());
System.out.println("y:" + y.getName());
}
}
结果
x:小李
y:小张
s1:小张
s2:小李
Java程序设计语言对对象采用的不是引用调用,实际上, Java 中只有值传递,对象引用是按值传递的。
下面再总结一下Java中方法参数的使用情况:
- 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)
- 一个方法可以改变一个对象参数的状态。
- 一个方法不能让对象参数引用一个新的对象(不能让实参引用一个新的对象,因为引用是copy的,实参引用了新的对象对形参没有影响)。
- 与equals
== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型比较的是值,引用数据类型==比较的是内存地址)
equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
- 情况1:类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
- 情况2:类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
- 注意
String中的equals方法是被重写过的,因为object的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值。
当创建String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个String对象。