java基础题(2)

(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]


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值