美文网首页
java基础-2018-05-09

java基础-2018-05-09

作者: 异常已捕获 | 来源:发表于2019-04-03 17:36 被阅读0次

    1.八种基本数据类型的大小,以及他们的封装类

    byte、short、int、float、long、double、char、boolean,它们的封装类分别是:

    Byte、Short、Integer、Float、Long、Double、Character、Boolean

    注:

    1.int是基本数据类型,Integer是int的封装类,是引用类型。int默认值是0,而Integer默认值是null,所以Integer能区分出0和null的情况。一旦java看到null,就知道这个引用还没有指向某个对象,再任何引用使用前,必须为其指定一个对象,否则会报错。

    2.基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。

    2.引用数据类型

    变量名指向存数据对象的内存地址,即变量名指向hash值,就是引用数据类型。Java中除去基本数据类型,其余对象都是引用数据类型。

    3.Switch能否用string做参数

    在java7以后支持:jdk1.7并没有新的指令来处理switch string,而是通过调用switch中string.hashCode,将string转换为int从而进行判断。

    java7之前:

    switch 只能支持 byte、short、char、int 这几个基本数据类型和其对应的封装类型。switch后面的括号里面只能放int类型的值,但由于byte,short,char类型,它们会 自动 转换为int类型(精精度小的向大的转化),所以它们也支持。

    4.equals与==的区别

    == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

    1、比较的是操作符两端的操作数是否是同一个对象。

    2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。

    3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:

    int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。

    equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

    对equals重新需要注意五点:

    1   自反性:对任意引用值X,x.equals(x)的返回值一定为true;

    2   对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;

    3   传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true ;

    4   一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变;

    5   非空性:任何非空的引用值X,x.equals(null)的返回值一定为false 。

    5.自动装箱,常量池

    装箱就是自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。

    常量池分为两种:静态常量池和运行时常量池。

    常量池的好处

    常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。

    例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。

    (1)节省内存空间:常量池中所有相同的字符串常量被合并,只占用一个空间。

    (2)节省运行时间:比较字符串时,==比equals()快。对于两个引用变量,只用==判断引用是否相等,也就可以判断实际值是否相等。

    相关文章

      网友评论

          本文标题:java基础-2018-05-09

          本文链接:https://www.haomeiwen.com/subject/lwvorftx.html