java面试可能会遇到的基础题目(1)
1.java的int字节和位数 4个字节和4*8=32位
2.值传递和引用传递的区别
先说一下形参和实参的区别
形参:方法被调用时需要传递进来的参数,如:fun(int a)中的a,它只有在fun被调用期间a才有意义,也就是会被分配内存空间,在方法fun执行完成后,a就会被销毁释放空间,也就是不存在了
实参:方法被调用时是传入的实际值,它在方法被调用前就已经被初始化并且在方法被调用时传入。
1、值传递
在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制一份传递到函数中,这样如果在函数中对该值(形参的值)进行了操作将不会影响实参的值。因为是直接复制,所以这种方式在传递大量数据时,运行效率会特别低下。
2、引用传递
引用传递弥补了值传递的不足,如果传递的数据量很大,直接复过去的话,会占用大量的内存空间,而引用传递就是将对象的地址值传递过去,函数接收的是原始值的首地址值。在方法的执行过程中,形参和实参的内容相同,指向同一块内存地址,也就是说操作的其实都是源数据,所以方法的执行将会影响到实际对象。
举例说明:
public class Rx {
String str = new String("rx");
int [] inta= {1, 2};
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.inta);
System.out.println(ex.str + " and");
System.out.println(ex.inta);
}
public void change(String str, int [] inta) {
str = "ok";
int [0] = 3;
}
}
3.数组和链表的区别
数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。最大的特点就是支持随机访问,但插入、删除操作也因此变得比较低
链表它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存,空间可扩容,比较常用的是单链表,双链表和循环链表。和数组相比,链表更适合插入、删除操作频繁的场景,查询的时间复杂度较高