小言_互联网的博客

Java基础面试

325人阅读  评论(0)

目录

  1. 数据类型
  2. 引用类型
  3. 运算符

JAVA数据类型

一、java的数据类型有哪些?

基本数据类型有四类八种:
整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
浮点型:float(4字节)、double(8字节)
字符型:char(2字节)
布尔型:boolean(1位)
引用类型:类class、接口interface、数组[]

二、float和long哪个存放的数据更大,为什么?

Float存放的更大,因为虽然float占用4个字节,long占用8个字节,但是float存储结构不同, 是把32位分成了两部分,一部分存放阶码(左移位数的2进制表示,等价于10进制指数),一部分存放尾数(移动后小数点后面的数字,等价于10进制底数)。

三、Integer和int的区别

  1. Integer是int的包装类,int则是java的一种基本数据类型
  2. Integer变量必须实例化后才能使用,而int变量不需要
  3. Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值;
  4. Integer的默认值是null,int的默认值是0;

四、可不可以使用char来存汉字?

可以,因为char是2个字节,汉字也是2个字节

五、i一定小于i+1吗?

不一定,如byte i = 127,加完之后结果为-1

六、Java类型转换

  • 自动转换(小转大/子类转父类):byte,short,char——>int——>long——>float——>double; byte,short,char相互之间不转换,他们参与运算首先转换为int类型 ;boolean类型不参与转换。
  • 强制转换:目标类型 变量名=(目标类型)(被转换的数据),可能会丢失精度;

七、Double a=0.09+0.01的结果是多少?怎么处理?

结果不是0.1,会丢失精度,用BigDecemal,同样大整形的时候可以使用BigInteger。
浮点数转二进制,是把小数点后面的值一直*2,一直到小数点后面为0结束,如果到了小数的底数表示的位数的时候还没有结束,就会直接丢失。

八、short s= 1; s=s+1有问题没有?s+=1;有没有问题?

第一个有问题,第二个没问题,因为+=做了特殊处理,相当于+完之后强转了

九、请输出下面的结果(包装类和基本类型)

int a = 128;
int b = 128;
System.out.println(a == b); //①

Integer a1 = 128;
Integer b1 = 128;
System.out.println(a1 == b1); //②

Integer a2 = 127;
Integer b2 = 127;
System.out.println(a2 == b2); //③

解析:对于①,由于a和b都是基本数据类型,==对比的时候采用的是值对比,所以相同,打印true
对于②和③,由于是对包装类型进行对于,所以比较的是引用,然后,对于整数,127到-128之间的数据存在了常量缓冲区,所以a2和b2并没有重新创建对象,而是指定了同一个地址,所以③为true,而a1和b1超出了范围,会创建出新的对象,所以不同,②打印false

回到目录

JAVA引用类型

JAVA里面引用有四种类型:强引用、软引用、弱引用、虚引用

  • 强引用:可以用来直接访问对象,指向的对象永远都不会被JVM回收,哪怕抛出OOM异常;可能导致内存泄漏
  • 软引用:强引用之前最强的引用。当堆使用率接近阈值的时候,会被回收。引用的对象被回收之前,通过SoftReference类的get方法可以返回对象,回收之后会返回null。可以用于实现对内存敏感的缓存系统。
  • 弱引用:是一种比软引用较弱的引用类型。在系统GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收。所以也可以用来做缓存,当内存充足的时候,可以用来提速,内存不足的时候,会自动回收。
  • 虚引用:所有类型中最弱的一个。一个持有虚引用的对象,和没有引用几乎是一样的,随时可能被垃圾回收器回收。当试图通过虚引用的get()方法取得强引用时,总是会失败。并且,虚引用必须和引用队列一起使用,它的作用在于跟踪垃圾回收过程。
  • 参看文档https://www.cnblogs.com/yueshutong/p/9531347.html

回到目录

运算符

一、最快的速度把一个数a*8

a << 3

二、&和&&的区别

  • 都可以做逻辑运算符,&还可以作为位运算符
  • &&是短路运算符,如果左边的表达式是false,右边不执行
    测试方式:
    if(b() && a()){
    	}
    	boolean a{
    		打印一句话
    		return true;
    	}
    
    	boolean b {
    		打印一句话
    		return false;
    
    	}
    

三、怎么交换a和b的值

  • 方式一
    int tmp = a ;
    a = b;
    b =tmp;
    
  • 方式二
    a = a+b;  
    b = a-b;  
    a = a-b;
    
  • 方式三
    a=a^b;
    b=a^b;
    a=a^b;
    
  • 方式四
    a = (a+b) - (b=a)
    

四、==和equals的区别

  • == 的作用
      基本类型:比较的就是值是否相同
      引用类型:比较的就是地址值是否相同
  • equals 的作用
      仅仅用于引用类型的比较。引用类型:默认情况下,比较的是地址值。
    注:不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同

五、JAVA集合体系

  1. 集合用来解决数组长度不可变的问题;
  2. Java中集合主要分为两种:单列的Collection和双列基于key-value的Map;
  3. Collection有两个子接口:List和Set。其中List是有序可重复的集合;Set是无序不可重复的接口;
  4. List常用的实现有ArrayList、LinkedList、Vector;
  5. Set常用实现有HashSet、TreeSet;
  6. Map主要实现有HashMap和HashTable和CurrentHashMap;

未完待续中…


转载:https://blog.csdn.net/mail_liuxing/article/details/102055764
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场