java基础面试题常出现(一),java开发面试笔试题


我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
推荐文章:Java 面试知识点解析Mysql优化技巧(数据库设计、命名规范、索引优化

 

1.”==“和equals方法的区别?

 

1. ==操作符,对于基本数据类型变量,比较的是两个值是否相等,而对于引用类型,比较的是引用的内存的首地址,即引用同一个对象。1




  •  
  • Obeject的equals方法,根据具体业务由开发者对其进行重写,没有重写,默认使用==。(Object类有两种方法来推断对象的标识:equals()和hashCode()。如果根据equals()方法判断两个对象是相等的,那么对这两个对象中的每一个调用hashCode()方法都必然生成相同的整数结果。但是反过来,如果两个hashCode()返回的结果相等,两个对象的equals()方法却不一定相等。在默认情况下equals()方法用来比较两个对象的地址值,而原始的hashCode()方法用来返回其所在对象的物理地址)


     
  • String重写了equals方法,有三种情况

     



    •  
    • 比较对象与当前对象是同一个对象(Object中的equals方法),返回true;


       
    • 传入的对象是String类型,比较两个字符串长度,不同返回false,若长度相同,则对每一位字符进行比较,每一位都相同返回true;


       
    • 传入的对象不是String类型,直接返回false。


       

     


     

2. ==和equal注意



 




  •  
  • 包装类的“==”运算在不遇到算术运算的情况下不会自动拆箱


     
  • 包装类的equals()方法不处理数据转型


     



 

2.String,StringBuilder,StringBuffer区别

  •  



    •  
    • String是内容不可变的字符串,底层使用 final char[]数组StringBuffer和StringBuilder底层使用的数组没有final关键字。


       
    • 对String的修改其实是new了一个StringBuilder并调用append方法,然后调用toString返回一个新的String。


       
    • StringBuffer是在StringBuilder基础上加锁,加锁是一个重量级的操作,需要调用操作系统内核来实现,比较耗时。因此效率明显有:String<StringBuffer<StringBuilde但是这个并不是绝对的,因为JVM会对String进行优化,譬如String str = "i"+"love"+"java";其中的字符串在编译时就能确认,编译器会直接将其拼接成一个字符串放在常量池:"i love java";但是若是String a = "i"; String b = "love";

      String c = "java";String str = a+b+c; 只有运行时才能确认str最终是什么,编译器并不会进行优化,是通过StringBuilder实现的


       



     

3.ArrayList和LinkedList的区别和使用场景




  •  
  • ArrayList和LinkedList都实现了java.util.List(支持泛型,可存放各种类型的对象),Cloneable(支持克隆), java.io.Serializable(支持序列化)。


     
  • 都不是线程安全的,若要在多线程中调用他们,可使用Collection.synchronizedList方法


     
  • ArrayList底层使用数组,LinkdLlist底层使用链表,数组具有随机访问特点,能查询特定的元素,但是插入删除和修改比较慢


     

4.变量初始化问题

 




  •  
  • 类变量在不设置初始值时,会进行默认值赋值,而局部方法中声明的局部变量和final声明的变量则必须进行手动初始化,不会进行默认值赋值。


     
  • Java中基本数据类型默认值为: short: 0 int: 0 long:0 float: 0.0 double: 0.0 char:0 String:null Java中对象引用默认值为:null


     

 

5.java文件中公共类和main方法





 




  •  
  • 一个文件中,可以有多个public class,即,外部类为public,还可以有public的内部类。


     
    public class Main { public class Inner{
    
        }
    
    }



     


     





 




  •  
  • 一个文件中可以有多个类,可以是多个并列的类,也可以是外部类、内部类结合。


     





 




  •  
  • 一个类中,可以有多个main方法,这是重载,但是public static void main(String[] args)的方法只能有一个。


     





 




  •  
  • 类中,可以有main方法,也可以没有main方法,而有一个main()方法的时候,也可以是任意访问权限。因为这个类不一定要执行,可以只是辅助类。


     
    public class MainTest { void main(){
    
        }
    
    }



     


     

 

5.数组的声明

 

(1)在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。





 

 


转载:https://www.cnblogs.com/sjxbg/p/8795333.html

推荐内容:
Java 面试知识点解析(二)——高并发编程篇
Java包(package)详解
java常见面试题
图解Java常用数据结构(一)
Java进阶篇(一)——接口、继承与多态
Java数据结构和算法(九)——高级排序
java Set HashSet详解
Java 集合和泛型
JAVA程序员面试总结
Java开发岗位面试题归类

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值