【java基础03】

1、下列关于Java语言中String和char的说法,正确的是(C)

A、string是Java定义的一种基本数据类型。
B、string是以"\0"结尾的char类型的数组char [ ]。
C、使用equals()方法比较两个string是否内容一样(即字符串中的各个字符都一样)。
D、char类型在Java语言里面存储的是AsCI工码。
题解:A选项: Java基本数据类型共有八大类,这八大数据类型又可分为四小类,分别是整数类型(bytelshortimtlong)、浮点类型(focat、double)、字符类型(char)和布尔类型(boolean),其中并不包括String。B选项中是C语言当中的String,Java的String虽然也是char类型的数组char]实现的,但并不以"0"结尾。C选项正确,String类重写了Object类的equals()方法,使用equals()方法可以用于比较两个string是否内容一样。D选项,char 类型的编码是Unicode编码。
2、下面有关java hashmap的说法错误的是(C)
A、HashMap的实例有两个参数影响其性能:"初始容量”和“加载因子"。
B、HashMap 的实现不是同步的,意味着它不是线程安全的
C、HashMap通过开放地址法解决哈希冲突
D、HashMap中的key-value都是存储在Entry数组中的
3、&运算,eg:13&17 ->01101&10001 ==00001->1,运算规则:1-0->0 0-0->0 1-1->1
4、下面有关java hashmap的说法错误的是(C)
A、HashMap的实例有两个参数影响其性能:"初始容量”和“加载因子"。
B、HashMap 的实现不是同步的,意味着它不是线程安全的
C、HashMap通过开放地址法解决哈希冲突
D、HashMap中的key-value都是存储在Entry数组中的
题解:HashMap通过采用拉链法解决哈希冲突.
5、两个数值进行二元操作时,会有如下的转换操作:│,
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
6、Java的异常分为两种,一种是运行时异常(RuntimeException),一种是非运行异常也叫检查式异常(CheckedException) ,1、运行时异常不需要程序员去处理,当异常出现时,JVM会帮助处理。常见的运行时异常有:
ClassCastException(类转换异常)
ClassNotFoundException
IndexOutOfBoundsException(数组越界异常)NullPointerException(空指针异常)
ArrayStoreException(数组存储异常,即数组存储类型不一致)还有IO操作的BufferOverflowException异常
2、非运行异常需要程序员手动去捕获或者抛出异常进行显示的处理,因为Java认为Checked异常都是可以被修复的异常。常见的异常有:IOException、SqlException
7、java中关于继承的描述正确的是(ACD)
A、一个子类只能继承一个父类
B、子类可以继承父类的构造方法
C、继承具有传递性
D、父类一般具有通用性,子类更具体
题解:子类不能继承父类的构造方法,但可以通过super()调用父类的构造方法
8、下列代码中,那些语句会编译错误(BCD)
byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1tb2);/*语句1*/
b6=b4+b5;
/*语句2*/
b8=(b1+b4);/*语句3*/
b7=(b2+b5);/*语句4*/
system.out.println(b3+b6);
A、语句2
B、语句1
C、语句3
D、语句4
题解:Java表达式转型规则由低到高转换:
1、所有的byte,short,char型的值将被提升为int型;2、如果有一个操作数是long型,计算结果是long型;3、如果有一个操作数是float型,计算结果是float型;4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
语句1错误: b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确: b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;语句3错误: b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);语句4错误: b7=(b2+b5);同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变。

9、根据下列代码,选项中返回为true的有()
Integer s=new Integer(9);
Integer t=new Integer(9);
Long u=new Long(9);
A、(s==u)
B、(s==t)
C、(s.equals (t))
D、(s.equals (9) )
E、( s .equals (new Integer (9))
题解:
A、==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。但不同类型的引用型变量无法比较,所以A错误.
B、因为u为Long型,s为Interger型.B、s与t为同一类型变量,且存储的值都为9,但当new时,会创建新的对象,在堆中存储新的地址,因此s与t指向堆中的地址不同,因此B错误.
C、s.equals (t),Integer的equals方法为:
public boolean equals(Object obj)
{
if (obj instanceof Integer)
 {
return value == ((Integer)obj).intValue();
}
return false ;
}
 即当t为Interger类型对象,则将t强转为Integer类型,再获取其栈中的内容与s的内容进行比较,内容相同返回true,不同返回false,而s与t为同一类型,且栈中值都为9,因此相等,所以C正  确.
D(s.equals(9)),在进行equals 比较之前,会对9调用IntegervalueOf方法,进行自动装箱,由于IntegerCache中已经存在9,所以,直按返回其引用,引用相同, equals就自然相同了。所以结果为真。
所以D正确.
E、(s.equals( new Integer(9))L,直接创建了一个新的Integer 实例,但且值也为9,所以,满足条件,返回真。
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。==比较的是两个对象的地址,而equals则需要根据是否重写来根据其规则进行比较.

10、根据下列代码段,下列选项输出正确的是(D)

public class Deo i{
public static void main(String[] args) {
Integer i1 =128;
Integer i2 =128;
system.out. print((i1== i2)+",");
String i3 = "100";
system. out.printt nSw_String("9o");
Integer i5 =100;
Integer i6 = 100;
System.out. println((i5 == i6));
}
}
A、true,false,true 
B、false, true,false 
C、true, true, false 
D、false,false,true 

题解:当我们给一个Integer赋予一个int类型的时候会调用lnteger的静态方法valueOf.lnteger i1 = Integer.valueOf(100);   lnteger i2 = Integer.valueOf(100);  lnteger i3 = Integer.valueOf(150);

Integer i4 = Integer.valueOf(150);那返回的Integer是不是重新new Interger()得到的呢?如果是的话,那==就全为false了,来看源码

public static Integer valueof(int i) i
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.***[i +( -IntegerCache.low)];return new Integer(i);
}

当满足条件时,返回IntegerCache数组,不满足则重新创建Integer对象,而low=-127,high=127.而128>127,所以不满足条件,创建新对象返回,所以i1!=i2,而-127<100<127,所以i5,i6的地址都为储存IntegerCache数组的地址,因此其地址相同,所以i5==i6.


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值