(1)& 与 &&的区别
& 的两种用法(1)按位与 (2)逻辑与
&&:称之为短路运算,如果 && 左边的表达式的值为false,右边的表达式会被直接短路掉,不会进行运算。
当在验证用户登录时判定用户不是 null 而且不是空字符串,应当写为 username!=null && !username.equals(""),二者顺序不能交换,更不能用&运算符,因为如果第一个条件不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException。注意:逻辑或运算和短路运算符号(||)的差别也是如此
(2)两个值相同 ( x.equals(y) == true ),但却可有不同的hashCode,这句话对不对?
不对,如果 x.equals(y) ,它们的HashCode应当相同。
java对 equals 和 HashCode 进行这样的规定:(1)如果两个对象相同(equals方法返回true),那么他们的hashCode值一定相同(2)如果两个对象的hashCode 相等,它们 equal 不一定为true。
(3)是否可以继承String
String类是final类,不可以被继承。
继承String本身就是一个错误行为,对String类最好的重用方式是关联关系(Has-A),而不是继承关系(Is-A)
(3)当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
如果参数是原始类型,不会改变
如果参数是引用类型,会改变
引用类型传递例子:
public class test {
@Test
public void test01(){
Student student = new Student();
student.setId(1);
student.setName("zhangsan");
System.out.println("function前"+student);
function(student);
System.out.println("function后"+student);
}
public void function(Student s){
s.setId(2);
s.setName("lisi");
}
}
class Student{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
输出:
function前Student [id=1, name=zhangsan]
function后Student [id=2, name=lisi]