JAVA SE - 数据类型

雨点打透心脏的1/2处 2024-03-16 22:19 173阅读 0赞

一、JAVA的数据类型的分类

Java的数据类型分为两类:基本数据类型和引用数据类型。上图解:

c58eb7fa7b2f487fa1a5dbd9daba14f0.png

对于基本数据类型,赋值时,注意个数据类型的取值范围。具体取值范围请见JAVA-常量和变量

接下来对基本数据类型进行代码演示:

整数型:

  1. byte b=10; //比特型
  2. int i=100; //整型
  3. short s=1000; //短整型
  4. long l=10000L; //长整型

浮点型:

  1. double d=1.1D; //双精度浮点型
  2. float f=2.2F; //单精度浮点型

字符型:

  1. char c='c'; //字符型

布尔型:

  1. boolean b1=true; //布尔型

二、包装类

衍生条件:基本数据类型不具备对象的特征,不能调用对象的方法。同时,发现,集合类并不支持基本数据类型的存入。这时候,把基本类型封装为对象,使其具备对象的属性和方法。


包装类

















































基本类型 默认值 包装类 默认值
byte 0 Byte null

short

0 Short
int  0 Integer
long 0L Long
float 0.0F Float
double 0.0D double
char null Characater
boolean false Boolean

包装类和基本数据类型的区别;

a、在内存中存储的区域不同:

包装类存储在堆内,调用时使用对象去调用

基本数据类型的值存储在栈内。

b、使用场景不同:

包装类型可以用在集合中,但是基本数据类型不可以(jdk1.5以后支持自动装箱)。

c、初始值不同(默认值)

详见上图。

三、基本类型和包装类的转换

a、手动转换:

基本类型——->包装类:对应包装类的构造方法实现:举例,上代码:

  1. int i=10;
  2. Integer i1=new Integer(i);

包装类——>基本类型:通过包装类的实例方法:xxxValue():进行转换。上举例代码:

  1. Character c1='a';
  2. char c=c1.charValue();
  3. System.out.println(c); //a

b、自动装箱和自动拆箱(jdk1.5以后)

基本类型添加到集合里时进行自动装箱。上代码:

  1. List<Integer> list=new ArrayList<Integer>();
  2. int i1=1;
  3. int i2=2;
  4. list.add(i1);
  5. list.add(i2);

在对包装类进行“加”,“减”,“乘”,“除”,“==”,“.equals”时,进行自动拆箱。代码实例:

  1. Integer in=3;
  2. int i=3;
  3. System.out.println(in==i);//true

再来看一个举例:

  1. Integer in=128;
  2. Integer in1=128;
  3. System.out.println(in==in1);

思考最后的结果。

结果为false。why?

既然是要了解原理,可以去对源码进行查看了解信息,因为设计到拆箱(包装类—->基本类型),所以查看valueof()方法;

  1. /**
  2. * Returns an {@code Integer} instance representing the specified
  3. * {@code int} value. If a new {@code Integer} instance is not
  4. * required, this method should generally be used in preference to
  5. * the constructor {@link #Integer(int)}, as this method is likely
  6. * to yield significantly better space and time performance by
  7. * caching frequently requested values.
  8. *
  9. * This method will always cache values in the range -128 to 127,
  10. * inclusive, and may cache other values outside of this range.
  11. *
  12. * @param i an {@code int} value.
  13. * @return an {@code Integer} instance representing {@code i}.
  14. * @since 1.5
  15. */
  16. public static Integer valueOf(int i) {
  17. if (i >= IntegerCache.low && i <= IntegerCache.high)
  18. return IntegerCache.cache[i + (-IntegerCache.low)];
  19. return new Integer(i);
  20. }

由源码可以看到,当i的值不在(-127,127)这个范围时,会创建一个新的对象。而==比较的是地址,既然创建了一个新的对象,地址自然也不一样。所以显示为false。注意:版本为1.5,就表示1.5版本以后才生效的。

四、基本数据类型进行运算时的转换

首先:小的转大的自动转换,大的转到小的要强制转换,不然会报错。

如下图解:

2bd6f6d12a534f34a7d9a14001a78e6c.png

其中黑色的箭头表示自动转换,红色的线条表示需要强制转换。

对于byte,short,int这三种类型,在进行运算的时候,若进行不同类型的运算,都默认自动转换为int类型的进行运算。

下面进行简单的代码举例;

  1. byte b1=10;
  2. short s=10;
  3. int i=s+b1;
  4. System.out.println(i); //20

具体的各种类型的转换不再进行过多的举例,推荐自己实践,代码的世界里,实践至上

另外,在大的数据类型强转为小的数据类型时,会出现精度丢失。具体在使用的时候需要注意实现要求。

五、引用类型

a、类Class的引用:

举例:

Object类:所有类的超类(父类),所有类的实例对象都可以实现Object类的方法:

String类:代表字符串,是底层是一个字符数组实现,有长度限制(大概是2^\{16\}-1)。

b、接口类型(interface)

c、数组类型

注意数组的定义方式;

  1. int[] a={1,2,3}; //定义一个1,2,3的值的数组a
  2. int[] b=new int[3]; //定义一个大小为3的一维数组b
  3. int[][] d=new int[1][3]; //定义一个一行三列的二维数组d
  4. int[][] c=new int[3][]; //定义一个3行的二维数组c

注意:二维数组的行数必须要给出,列可以不可给出。

d、枚举类型(enum)

总结:对数据类型的讲解就到这里了,如有错误和补充欢迎各位博主一起探讨,共勉。

一起加油!!!

发表评论

表情:
评论列表 (有 0 条评论,173人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java se

    Java是一门面向对象的编程语言 OOP(面向对象)三大特性:封装、继承、多态 封装 将东西包装在一起,然后以新的完整形式呈现出来。在JAVA中就是将方法和属性一起包装到