java的数据类型

    xiaoxiao2023-10-25  168

    1. 数据类型分类

     基本数据类型(8种基本数据类型)       复合类型(引用类型,类类型):类,枚举,接口,数组,字符串(底层用char数组实现)

     

    2.基本数据类型分类  

     

    3、基本数据类型及其包装类

           java是一个近乎纯洁的面向对象的语言,但是为了编程的方便还是引入了基本数据类型,为了能将这些基本数据类型能够当做对象处理,因此java为每一个基本数据类型都提供了它的包装类。从java5开始引入了自动装箱、自动拆箱机制,使二者可以相互转换。

     

    4.基本数据转换

    自动类型转换:数字表示范围小的数据类型可以自动转换成范围大的数据类型。

    强制类型转换:强制显示的把一个数据类型转换为另外一种数据类型。 int num=128; short number=(short)num; System.out.println(number);

      以上的转换结果都在我们的预期之内,属于正常的转换,但有时强制转换会出现丢失精度、数据溢出的情况。

    int b=129; byte bb=(byte)b;//byte的取值范围在-128~127 System.out.println(bb);

     

    5、字符串和基本数据类型之间的转换

    字符串转基本数据类型

      调用基本类型对应的包装类中的方法parseXX()或valueOf(),即可返回对相应的基本类型

    String s="1234"; int a=Integer.parseInt(s); long b=Long.valueOf(s); 基本数据类型转字符串

    一:在基本数据之后与空字符串“”用“+”连接; 二:调用String类中的valueOf()方法

    int num=12; String s1=num+""; String s2=String.valueOf(num);

     

    6、常见面试题:

    1.写出下列语句输出结果

    例1:

    public class Demo01 { public static void main(String[] args) { Integer a=new Integer(3); Integer b=3; //3自动装箱成Integer类型,相当于Integer b=new Integer(3) int c=3; System.out.println(a==b);//false a和b二者都为引用类型,但并没有引用同一个对象 System.out.println(a==c);//true a自动拆箱为int类型再和c比较 System.out.println(b==c);//true b自动拆箱为int类型再和c比较 } }

    结果:

    false true true

    例2:

    public class Demo01 { public static void main(String[] args) { Integer f1=100,f2=100,f3=150,f4=150; System.out.println(f1==f2);//true System.out.println(f3==f4); //false } }

     结果:

    true false

    分析:首先f1,f2,f3,f4都会自动装箱为Integer对象,相当于new Integer(),而Integer是引用类型,故它的==比较,比较的就不是值,而是地址,自动装箱的本质就是调用Integer的静态valueOf()方法,查看这个方法的源码可知道,当整型字面量的值在-128~127之间时,就不会

    new新的 Integer对象,而是直接引用 常量池的Integer对象,而不在-128~127之间时,才会new新的 Integer对象,因此f1==f2的结果是true,而f3==f4的结果是false。

     

    2.String、StringBuffer、StringBuilder的区别

    String:字符串常量,在修改时不会改变自身,因为它可以理解为被final修饰的常量,显然是线程安全的。

    StringBuffer:在修改时会改变自身,每次操作都是对StringBuffer对象本身做修改,线程安全。

    StringBuilder是java5引入的,它和StringBuffer的方法完全相同,二者有均继承于AbstractStringBuilder,会调用该抽象类中的公共方法,如:append、insert、indexOf(...),   区别在于,StringBuffer会在方法上加上synchronized关键字,进行同步,来保证线程安全,而StringBuilder是线程不安全的。

    三者如何选择?

    如果一个字符串不经常改,优先考虑使用StringBuilder。

    程序是单线程的,修改或者操作大量的数据,优先考虑使用StringBuilder。

    程序是多线程的,考虑线程安全,修改或者操作大量的数据,优先考虑使用StringBuffer。

    最新回复(0)