2012.8.28 菜鸡日记

6/10
3、
public static void main(String args[]) {
List Listlist1 = new ArrayList();
Listlist1.add(0);
List Listlist2 = Listlist1;
System.out.println(Listlist1.get(0) instanceof Integer);
System.out.println(Listlist2.get(0) instanceof Integer);
}
true true
这题看似简单,实际水有点深。
ArrayList在底层存储数据时就是采用的一个Object[]类型的数组来实现的。
在add的时候由于0是基本类型, 所以在add时会发生自动装箱操作, 将0转换为Integer类型然后添加到ArrayList中。
在get操作时会强转为泛型类型然后返回,在此例中并没有给ArrayList泛型。 所以使用的默认值, 即Object类型。所以此例中返回的是一个Object的对象。
instanceof在进行比较时会获取对象的实际类型进行比较,
所以通过list1.get(0)和list2.get(0)获取到的对象的实际类型肯定是Integer
最后这个instanceof 可能有错误

5、
String str = "";
System.out.print(str.split(",").length);
输出为1

注意2点: 1:String获取长度用的是length()方法,而数组类型我们直接用属性length获取长度,所以String[]数组类型我们应该用length获取长度;2:总结来说,因为原字符串不包含分隔符,所以直接返回原字符串,分割出来只有一个空的字符串数组,所以结果是1.(注意,虽然原字符串为空,存到字符串数组为空,但是这个空也会算一个元素。)

split函数:
https://www.cnblogs.com/zzq6032010/p/10300278.html
8、
&按位与 |按位或 ~取反 ^异或

异或运算也可以用来交换两个数的值
例如:
a=11, b=9.
a = a^b = 1011^1001 = 0010;
b = b^a = 1001^0010 = 1011;
a = a^b = 0010^1011 = 1001;
经运算后,此时:a = 9,b = 11;

位运算
(1)按位与 同时为1,则为1 否则为0 例:a = 2; b = 3; a & b => 10 & 11 => 10
(2)按位或 有一个为1,则为1,否则为0 例:a = 2; b = 3; a | b => 10 | 11 => 11
(3)按位异或 不同为1,相同为0 例:a = 2; b = 3; a ^ b => 10 ^ 11 => 01
(4)按位取反 二进制数在内存中是以补码的形式存在的,我们要得到补码然后取按位取反
原码->反码->补码 列:a = 2;二进制原码 => 10 反码 => 010 ,前面补零(多1位符号位)其中最左面的是符号位,0为正,1为负。正数原反补一样,负数是原码(符号位不变 取反) -> 反码(反码+1) -> 补码。010是正数,补码为 010 , 对补码按位取反 101,把按位取反后的二进制数101转为补码,101是负数,101 => 110 => 111 = > -0b11 => -3 公式 ~x = -(x+1)
(5)按位左移 << 按位左移,左移n位相当于乘以2的n次方 例:a = 2; a << 3 => 16
(6)按位右移 >> 按位右移,左移n位相当于除以2的n次方 例:a = 2; a >> 3 => 0

9、标识符规则:字下美人数,字母、下划线、美元、人民币、数字
不能以数字开头,不能用保留字和关键字

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务