我的女友是丧尸,传奇手游,沧海桑田

admin 2019-03-20 阅读:199
作者:帅地
公众号:苦逼的码农(ID:di201805)

下面我总结了集合种族变更待定怎么取消、泛型、数组转集合等一些常见的陷进,认真看完,相信你绝对有所收获。

1、List ,List

有区别吗?

说实话,我敢保证很多人是不知道 List, Li妈妈卖淫st

之间的区别的。

1、我们先来看看 List 与 List

很多可能觉得 List

的用法与 List 是一样的,例如很多人认为

List

list;

List list;

这两种定义方法是一模一样的,然而他们是不一样的。看下面一段代码

 List t1 = new ArrayList<>();
// 编译通过
List t2 = t1;
//编译失败
List

t3 = t1;

t1 可以赋给 t2, 但是 t1 不能赋给 t3,会抛出如下异常

从这里可以看出

List list;

List

list;

是有区别的,List 变量可以接受任何泛型的变量,而 List 则不可以。

2、我们在看看 Lis

看下面一段代码:

List赋值之后就不能往里面添加元素了,提示如下错误:

所以 List

List 与 List

的细微区别知道了吧?

2、

我们知道泛型 List 只能放置一种类型,如果你采用 List

来放置多种类型,然后再进行类型强制转换的话,那会失去了overthumbs泛型的初衷。

为了能够放置多种类型,于是有了 可能原本就知道的知识:

1、对于 ,a 这个变量可以接受 T 及其 T 子类的集合,上界为 T,并且从 a 取出来的类型都会被强制转换为 T。重点看下面一个例子:

注意:我们先约定 Cat(猫) 继承自 Animal(动物),Red陶珏玉Cat(黑猫) 继承自 Cat

注意,不能向里面添加除null之外的其他所有元素,这个和 List

2、现在说说 对于 ,a 这个变量可以接受 T 及其 T 父类的集合,下界为 T,并且从 a 取出来李芭妮的类型都会被强制转换为 Object。重点看下面一个例子:

注意,<? super T>最需要注意的是,在虽然可以接受 T 及其父类的赋值,但是只能向里面添加 T 及其 T 的子类

总结

1、List不能向 a 添加任何除 null 外是元素

2、List但添加的只能是 T 及其子类元素

3、泛型与重载

我们先来看一道题,你觉得下面这道题能够编译通过吗?

答是编译不通过

两个方法的参数不同,为什么会天鹅劫重载不通过呢?

实际上在 Java 的泛型中,泛型只存在于源码中,在编译后的字节码中,泛型已经被替换为原生类型了,并且在相应的地方插入了强制转换的厦门广成实业有限公司代码。为了方便理解,可以看下面的一段代码例子:

编译之后泛型就不存在了,并且在相应的地方插入了强制我的女友是丧尸,传奇手游,沧海桑田转换的代码,编译之后,我们反编译的代码如下:

这种 编译之后泛型就不存在了,并且在相应的地方插入了强制转换代码的机制我们也称之为擦除

所以上面的两个方法,看似参数不一样,但是经过编译擦出之后,他们的参数就是一样的了,所以编译不通过。

4、数组与集合相互转换时需新婚学校要注意的点

1、数组转集合

大家变身无罪先看一个例子吧,

向集合添加元素抛出了如下异常:

问题来了,向集合添加元素为啥会抛出异常呢??

我们先来看藏密圣方一下 Arrays.asList(arr) 方法究竟返回了什么?

源漏奶码如下:

返回的明明是 Arra候明旲yultimatesurrenderList 啊,为啥就不能添加元素呢??

实际上,此 ArrayList 非彼 ArrayList,这个返回的 ArrayList 实际上是 Arrays 的一个内部类。该内部类也是十分简单,和真实的那个 ArrayList 没得比,部分源码如下:

而且这个假的 ArrayList 是直接 引用原数组的,不然你看它的构造器(第二条画线)

也就是说,ArrayList 内部是直接引用 arr 数组,你对 arr 数组进行改变,也会同时改变到 list 集合。

下面的代码证明这一点

打印结果是 “0”。

所以,我们向 肿瘤专家王振国list 添加元素肯定失败,因为 arr 数组的长度了 3 ,本来就恋夏38℃有 3 个元素了,你在向里面添加第四个元素,肯定是不行的。

所以,在把数组转换为集合的过程中,需要特别注意。

建议大家这样转换比较安全

List list = new ArrayList<>(Arrays.asList(arr));


2、集合春之望转数组

集合转换为数组相对比较不苛刻,我就不拉很多源码来进行分析了,我只简单说下几个需要注意的地方。例如对于下面野龙生存技这个转换:

// 集合大小为 清炒蒜蓉四季豆size
List list = new ArrayList<>();
// 长度为 n 的数组
String[] arr = new String[n];
// 进行转换
list.toArray(arr);

1、如果数组长度比集合小:由于 arr 的长度不够,所以集合里的元素不会赋给 arr,而且自己再重新创建一个新数组反回去。

2、如果数组长度不小于集合:此时 arr 的长度够了,所以集合里的元素直接复制给 arr 数组,不会重新创建一个新的元素。

一览源码:

以上这些陷进相信有不少人是不知道了,我把它总结整理了出来,如果大家看完觉得有收获,不妨点个好看鼓励我一下?宋丹雅