Java测试复盘

参数顺序改变时,在方法被调用时也能被区分。

但如果只是返回值类型不同,参数列表相同,调用方法时并不能区分。所以返回值类型必须与参数搭配着改变才能构成重载。


 

 

int和Integer的区别

1、Integer是int的包装类,int则是java的一种基本数据类型

2、Integer变量必须实例化后才能使用,而int变量不需要

3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值

4、Integer的默认值是null,int的默认值是0

延伸:

关于Integer和int的比较

1、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。

1

2

3

Integer i = new Integer(100);

Integer j = new Integer(100);

System.out.print(i == j); //false

2、Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)

(第二题考察的是这里)

1

2

3

Integer i = new Integer(100);

int j = 100;

System.out.print(i == j); //true

3、非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向中新建的对象,两者在内存中的地址不同)

1

2

3

Integer i = new Integer(100);

Integer j = 100;

System.out.print(i == j); //false

4、对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

(第一题1,3判断考察的是这里)

1

2

3

4

Integer i = 100;Integer j = 100;

System.out.print(i == j); //trueInteger i = 128;

Integer j = 128;

System.out.print(i == j); //false

对于第4条的原因:
java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100);,而java API中对Integer类型的valueOf的定义如下:

1

2

3

4

5

6

7

public static Integer valueOf(int i){

    assert IntegerCache.high >= 127;

    if (i >= IntegerCache.low && i <= IntegerCache.high){

        return IntegerCache.cache[i + (-IntegerCache.low)];

    }

    return new Integer(i);

}

java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了


 

 当catch捕获到异常后,模块之外的语句将不再执行。

第一次:foo(0)。没有捕捉到异常,所以不会输出2,而finally是一定要执行的,所以输出3

输出3之后顺序往下执行,遇到output+=”4“,输出4

第二次:foo(1)。捕捉到异常,输出2,同理,而finally是一定要执行的,所以输出3,而捕捉到异常,模块外的语句将不再执行。

所以最终答案是3423,选C。


static方法中是不能访问非静态变量,否则导致编译错误

题中static方法访问的是静态变量,所以不会导致编译错误。正确;

int的默认值是0,integer的默认值是null,此处为int,所以输出0。


 子类继承父类后,还可以添加自己的变量和方法,比父类更加具体。


如果else if 中的条件是包含关系,改变之后久可能对程序的执行结果有影响。


C. double d = 0x12345678; (十六进制整数,自动转 双精度浮点数)是正确的。

D. float f = -412; (自动转 -412.0f 单精度 浮点数)是正确的。

E. long test = 012; (八进制整型)是正确的。

A中,如果 true 用大写,int other = (int) TRUE; 便是正确的。


多态可以扩展代码模块。 


静态代码块,在jvm加载类的时候就会加载执行,而且只执行一次;
非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次
一个程序可以有多个静态非静态代码区域。

 


 Emmmmmmmmmm.......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值