9 &与&&有什么区别?| 内部类 | 泛型

本文深入探讨了Java中的重要概念,包括逻辑运算符的区别、匿名内部类的使用、以及泛型的高级应用。通过具体的代码示例,解释了&与&&的不同之处,展示了匿名内部类如何实现接口或继承父类,并详细解析了泛型在方法调用中的具体表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,题目&与&&(短路)有什么区别?

int a = 3;
		int b = 5;
		int c = a & b;
		System.out.println(c);



输出结果 1 

3的二进制值 011

5的二进制值101

一个&有两个功能,既可以按位运算,也可以进行逻辑运算。 按位运算位 001 所以输出1

int a = 1;
		int b = 2;
		if((a==2) && ((b = 3) == 5)){
			System.out.println("execute");
		}
		System.out.println(a);
		System.out.println(b);



输出

1

2

if里a不等于2 所以后面不会被执行,所以a和b还是原来的值。

		int a = 1;
		int b = 2;
		if((a==2) & ((b = 3) == 5)){
			System.out.println("execute");
		}
		System.out.println(a);
		System.out.println(b);

输出结果

1

3

当一个&时没有短路概念,后面的还会去执行,所以这会b被赋值为3。


2, 匿名内部类(anonymous inner class)

关于匿名内部类:该类一定是继承了某个父类或者是实现了某个接口。

public String get(Date date){
		return date.toLocaleString();
	}

	public static void main(String[] args) {
		Test test = new Test();
		String result = test.get(new Date(){
			public String toLocaleString(){
				return "love";
			}
		});
		System.out.println(result);
	}
打印出 love

关于内部类:

1 静态内部类(static inner class)

2 成员内部类  (member inner class)

3 局部内部类(local inner class)

4 匿名内部类(anonymous inner class)


3,泛型

	public void method1(List<Object> list){}
	
	public void method2(){
		method1(new ArrayList<Object>());
		method1(new ArrayList<String>());
		method1(new LinkedList<Integer>());
	}

是否可以编译通过?

sh-3.2# javac Test.java 

Test.java:17: 错误: 不兼容的类型: ArrayList<String>无法转换为List<Object>

method1(new ArrayList<String>());

        ^

Test.java:18: 错误: 不兼容的类型: LinkedList<Integer>无法转换为List<Object>

method1(new LinkedList<Integer>());

        ^

注: 某些消息已经过简化; 请使用 -Xdiags:verbose 重新编译以获得完整输出

2 个错误


不能编译通过。

关于泛型的继承:

ArrayList<Object> 继承了 List<Object>

ArrayList<String> 没有继承 List<Object>

	public void method3(List<? extends Object> list){
	}
	
	public void method4(){
		method3(new ArrayList<Object>());
		method3(new ArrayList<String>());
		method3(new LinkedList<Integer>());
	}

是否可以编译通过?

可以。

	public void method5(List<?> list){
		
	}
	
	public void method6(){
		method5(new ArrayList<Object>());
		method5(new ArrayList<String>());
		method5(new LinkedList<Integer>());
	}

是否可以编译通过?

可以。

说明:

List<? extends Object> list 等同于 List<?> list
传进来的类型,只要是继承Object的就没有问题。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值