首页 > 其他 > 详细

java面试基础题目(二)

时间:2014-02-27 13:36:30      阅读:505      评论:0      收藏:0      [点我收藏+]

11、"=="和equals方法究竟有什么区别?

    "=="操作符专门用来比较两个变量的值是否相等,比较变量对应的内存中所存储的数值是否相同。要比较两个基本类型的数据或两个引用类型的变量,只能用"=="操作符。

    如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占一块内存,

    例如 Object obj = new Object();变量obj是一个内存,new Object() 是另一个内存。此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。

    对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,用"=="操作符。

    equals方法是用于比较两个独立对象的内容是否相同,例如:String a = new String("foo");      String b = new String("foo");

    两条new语句创建了两个对象,让后用a/b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以

    表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。

12、静态变量和实例变量的区别?

    在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

    在程序运行时的区别:实例变量属于某个对象的属性,必须创建实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。

                        静态变量不属于某个实例对象,而属于类,所以也称为类变量,

                        只要程序加载了类的字节码,不用创建任何实例对象。静态变量就会被分配空间,静态变量就可以被使用了。

    总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

13、是否可以从一个static方法内部发出对非static方法的调用?

    可以。可以在static方法内部构造一个实例化对象,让后通过对象去调用非static方法。

    

bubuko.com,布布扣
public class CharNum {
    public static void A(){
        CharNum c = new CharNum();
        System.out.println(c.B());
    }
    
    public int B(){
        int  i = 88;
        return i;
    }
       
    public static void main(String[] args) {
         CharNum.A();
    }

}
bubuko.com,布布扣

14、Integer和int的区别

    int是java提供的8种基本数据类型之一。Integer是java为int提供的封装类。

    int的默认值为0,而Integer的默认值是null,即Integer能区分出 未赋值和赋值为0的区别。

    例如:想要表达出没有参加考试和考试成绩为0的区别,只能用Integer。

          在jsp开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串。而int的默认值为0,显示为0。

          所以int不适合作为web层的表单数据的类型。

          在Hibernate中,如果OID定义为Integer类型,那么Hibernate就可以根据其值是否为null 而判断一个对象是否是临时的

          如果将 OID 定义为了 int 类型,还需要在 hbm 映射文件中设置其 unsaved-value 属性为0。

    另外,Integer提供了多个与整数相关的操作方法。例如,将一个字符串转化为整数,Integer中还定义了表示整数的最大值和最小值的常量。

15、Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

    Math类中提供了三个与取整有关的方法:ceil、floor、round

    ceil是上取整:Math.ceil(11.3)结果是 12,Math.ceil(-11.3)结果是 -11

    floor是向下取整:Math.floor(11.3)结果是 11 ,Math.floor(-11.3)结果是 -12

    round是"四舍五入":Math.round(11.5) 结果是 12 ,Math.round(-11.5)结果是 -11。

    算法为 Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整

16、下面的代码有什么不妥之处?

  1. if(username.equals(“zxx”){}    username 可能为 NULL,会报空指针错误;改为"zxx".equals(username)

  2. int x = 1;
     return x==1?true:false;          这个改成 return x==1;就可以!

17、请说出作用域 public, private, protected,以及不写时的区别?

bubuko.com,布布扣

18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

    Overload是重载的意思,Override是覆盖的意思。也就是重写。

    重载Overload表示同一个类中可以有多个名称相同的方法,但是这些方法的参数列表各不相同。

    重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中定义的方法。相当与把父类中的方法覆盖掉了。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是父类异常的子异常。子类方法的访问权限只能比父类的更大。

    至于Overloaded的方法是否可以改变返回参数类型,如果方法的参数不一样,返回类型可以不一样。但是参数一样,返回类型不一样,这样是不构成重载的。

19、构造器Construcor是否可被override?

    构造器 Constructor 不能被继承,因此不能重写 Override ,但可以被重载 Overload 。

20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main方法?

   接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的 main 方法。

  

java面试基础题目(二),布布扣,bubuko.com

java面试基础题目(二)

原文:http://www.cnblogs.com/Everyjoy/p/3566153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!