1.&和&&有什么区别
& 不管前面的条件是否正确,后面都执行
&& 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好
2.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
在switch(e)中,e只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
switch中可以是字符串类型,String(JDK1.7之后才可以作用在string上),switch中可以是枚举类型(JDK1.5之后)。
3.静态变量和实例变量的区别?
首先在语法定义上区别:静态变量前面要加static,实例变量不用
在程序运行时:实例变量输入对象的属性,必须创建了实例对象(如 new)才会被分配空间,才可以使用实例变量,静态变量不属于某个实例对象,而是属于类,也叫类变量,只要程序加载了类的字节码,不用创建任何实例对象就会被分配空间,就可以被使用。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
4.使用final关键字修饰一个变量时,是引用不能变,还是引用的变量不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer a =new StringBuffer("immutable");
a 是引用变量 a指向的对象中的内容还是可以改变的
执行如下语句将报告编译期错误:
a=new StringBuffer("");
但是,执行如下语句则可以通过编译:
a.append(" broken!");
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:
public void method(final StringBuffer param){
}
实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:
param.append("a");
5.Integer与int的区别
1.Integer是int的包装类,int则是java的一种基本的数据类型;
2.Integer变量必须实例化之后才能使用,而int变量不需要实例化;
3.Integer实际是对象的引用,当new一个Integer时,实际上生成一个指针指向对象,而int则直接存储数值
4.Integer的默认值是null,而int的默认值是0。
6.java的几种基本类型
7.String能被继承吗?为什么?
不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。平常我们定义的String str=”a”;其实和String str=new String(“a”)还是有差异的。
前者默认调用的是String.valueOf来返回String实例对象,至于调用哪个则取决于你的赋值,比如String num="a",调用的是
public static String valueOf(Object obj){
return (obj == null) ? "null" : obj.toString();
}
后者则是调用如下部分:
public String(String original) {
throw new UnsupportedOperationException("Use StringFactory instead.");
}
最后我们的变量都存储在一个char数组中
private final char value[];
8.String,StringBuffer,StringBuilder的区别
1.String为字符串常量,一旦创建不可更改,对它的操作是不断创建新对象以及回收旧对象,StringBuffer和StringBuilder为变量,可以修改。
2.StringBuffer是线程安全,StringBuilder不是线程安全。
3.运行速度对比:StringBuiler>StringBuffer>String(速度从高到底)
4.一般在不涉及多线程访问,频繁更改值的情况下,建议使用StringBuilder
总结:
String:适用于少量字符串操作
StringBuilder:适用于单线程字符缓冲区的大量操作
StringBuffer:适用于多线程字符缓冲区的大量操作
9、String 是最基本的数据类型吗?
不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
10、用最有效率的方法计算2乘以8?
2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。
11.重载(Overload)和重写(Override)的区别?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
Java实现多态有三个必要条件:继承、重写、向上转型(将子类转化为父类)。
静态的多态:方法名相同,参数个数或类型不相同。(重载overloading)
动态的多态:子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法
实现接口的实例传与接口的引用调用的实现类的方法。
13、数组有没有length()方法?String有没有length()方法?
数组没有length()方法,有length 的属性。String 有length()方法。
14、构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不能被重写,但可以被重载。
15、List、Set、Map是否继承自Collection接口?
List、Set 是,Map 不是。Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形。
16、Collection和Collections的区别?
Collection是一个接口,它是Set、List等容器的父接口;Collections是个一个工具类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
17、List、Map、Set三个接口存取元素时,各有什么特点?
List以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一
持续更新中