hashmap是一个散列表,存储内容是key-value映射, 整型的(Integer)key和字符串类型(String)的value
Hashmap实现了Map接口,根据键的hashcode值存储数据,最多允许一个键为null,
hashmap是线程不安全的。
hashmap是无序的,即插入数据的顺序不会有序
可以有多个类,只能有一个public类,并且public的类名必须和文件名一致
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符的两边的表达式的
结构都为true时,整个运算结果才为true,否则只要有一方为false,则表达式为false
&&具有短路功能,如果一个表达式为false,则不会进行第二个表达式 ,例如
if(str != null && str.equals(''))表达式,当str为null时,后面的表达式不会执行,如果将&&改成&,则出现空指针异常
&可以作为位运算符,当&操作符的两边的表达式不是boolean类型时,&表示按位与操作,例如
0x31 & 0x0f 的结果是 0x01 获取改整数的最低4个bit位。
在java中,要想跳出多重循环,可以在外面的循环语句前加一个标号,然后在里循环的代码体中使用带有标号的break语句,即可跳出外层循环。
for(int i=0;i<10;i++) {
for(int j=0;j<10 j++)
system.out.println("i="+i+"j"+j);
if (j==5) break ok;
}
通常不使用这种方法,让外层的循环表达式的结果可以收到里层循环体代码的控制,例如在二维数组中查找出某个数
```
int arr[][]={{1,2,3},{4,5,6,7},{9}};
boolean found=false;
for(int i=0; i
在switch(expr1) 中,expr1只能是整数表达式或者是枚举常量,整数表达式可以是int类型或者integer包装类型。
由于byte,char,short类型都可以隐含转换成int
所以byte,char,shor以及包装类型都是可以的,所以,long,string类型的就不可以,不符合switch语法。
char型变量时用来存储unicode编码的字符,在unicode字符集中包含了汉字,所以char型变量中可以存储汉字。因为unicode编码占有两个字节,所以char型变量也占有两个字节。
2 >> 3
因为一个数左移n位,就相当于乘以了2的几次方,一个数乘以8只要左移三位即可,
cpu位运算直接支持,效率最高
使用finnal修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
修改方式如下:
final StringBuffer a = new StringBuffer("immutable");
a=new StringBuffer("");
a.append("broken");
将final修饰的变量内容改变了。
解答:==操作符用来比较两个变量的值是否相等
equals方法:用于比较两个独立的对象的内容是否相等。
如下代码:
String a = new String("foo");
String b = new String("foo");
因为a 和b是两个不同的对象,即a和b中存储的数值是不相同的。所以a==b 返回false
因为两个对象中的内容是一样的,所以a.equals(b) 返回true
equals方法继承与object类,字符串的比较基本上都使用equals方法比较
静态变量需要加static关键字,而实例变量不加
静态变量不属于某个实例对象,而是属于类,也称类变量 通过类.类变量
实例变量必须创建对象后才可以通过这个对象来使用。
不可以,因为非static方法要与对象关联在一起,必须创建该对象后,才可以在该对象上使用,
而static方法调用非static方法,可能这个非static方法的对象实例还没有创建。
解答:int是java中原始数据类型,int的默认值是0
integer是java为int提供的封装类,Integer默认值是null
多态就是同一个接口,使用不同的实例而执行不同的操作
在使用多态方法时,首先检查父类中是否有该方法,如果没有则编译出错,如果有,再去调用子类的同名方法
多态存在的三个必要条件:
继承,
重写,
父类调佣指向子类对象 Parent p = new Child();
比如接口为打印机。黑色打印机需要调用打印机接口,打印出黑色内容
彩色打印机需要调用打印机接口,打印出彩色内容。
在运行状态中,对任意一个类,能知道这个类的所有属性和方法。
对于任意一个对象,能调用它的任意一个方法和属性。
这种动态获取信息的方法成为Java的反射机制
通过new对象实现反射机制
通过路径实现反射机制
通过类名实现反射机制
public class Student{
private int id;
}
String 不可变但不代表引用不可以变
String 类是final类,不可以被继承
String和StringBuffer,StringBuilder的区别是什么?
String的对象是不可变,使用private final char value[] 修饰
StringBuilder和StringBuffer 对象是可变的,使用数组保存字符串
String中对象是不可变的,也可以理解为常量,线程安全
StringBuilder并没有对方法加同步锁,所有线程不安全
StringBuffer对方法加了同步锁或调用加了同步锁,因此线程安全
多线程操作字符串使用StringBuffer
单线程操作字符串使用StringBuilder
操作少量数据使用String