JavaSE 数据类型以及基本转化与包装

数据类型.

先简单介绍java中的语法可以速速过一遍

1.基本类型(八个)

数值型

整型类型

  • byte型:1字节 8bit位 第一位是符号位

    byte a = 127;
    

  • short型:2字节

    short b = 32767;
    
  • int 型:4字节

    int c = 123;
    int c = 0b123;//二进制
    int c = 0123;//八进制
    int c = 0x123;//十六进制
    
  • long型:8字节

    long d = 123l;
    long d = 123L;//数字后缀L或l
    

0b0B开头数字 为二进制

0开头数字为 八进制

0x0X开头为16进制

浮点类型

  • float :4字节

  • 单精度,尾数可以精确到7位有效数字

    float e = 123.4f//数字后缀加f或F
    
  • double: 8字节

  • 双精度,精度是float的两倍。通常采用此类型。

    double f = 123.4
    
    %%java浮点型默认为double类型%%
    • 十进制数形式,例如: 3.14 314.0

    • 科学记数法形式,如 3.14e2 3.14E2

字符型 (char)2字节

  • 使用了Unicode 编码 兼容了Ascll码
  • 可以参与算术运算,本质是使用了Unicode编码表中对应的10进制编号来进行计算

逻辑型(boolean)

  • ture

  • false

2.引用类型

String类型(字符串)(相关API会在API.md文件里面介绍)

String是一个类,String的变量是对象的管理者而非所有者

  • '+'相当于字符串连接符

  • String s = "abcd";

  • 1.任意八种基本数据类型的数据与String类型只能进行连接“+”运算(字符串连接),且结果一定也是String类型

  • 2.String类型不能转为其他的基本类型

	String s = new String("a string");//创建一个String的对象,用“a string”初始化这个对象
 String a = "hello";
       String b = "world";
       String c = a + b;
       String d = a + b + 12;
       System.out.println(a);
       System.out.println(b);
       System.out.println(c);
       System.out.println(d);
  
运行结果:
  
  ```java
  
  hello
  world
  helloworld
  helloworld12
  
  Process finished with exit code 0
  
  • 输入字符串

    in.next();读入一个单词,单词标志是空格(包括空格、tap和换行)

    in.nextLine();读入一整行

  • 比较两个String

    if(input == "bye"){//比较是否同一个
    	····
    }
    if(input.equals("bye")){//比较内容是否相同
    	····
    }
    

    Strings应该用.equals 来比较

接口(interface)(后面会介绍)

数组([])(后面专门介绍)

包裹类型(特殊的数据类型)

  • 它用于将基本数据类型包装成对象

基本数据类型的转换

  • 八种基本类型除了boolean类型以外,其他七种类型之间可以相互转化

转换规则:

1.默认转换

将取值范围小的的类型自动提升为取值范围大的类型

(byte,char,short(byte->short))->(int)->(long)->(float)->(double)

4个字节float比8个字节long取值范围要大

原因: 浮点数在存储时结构与整数计算方式不同

2.强制转换

容量大的转换为容量小的

格式 : (强制转换的类型) 变量名

int a =258;
byte b = (byte)a;

注:有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一 种数据类型,然后再进行计算会有精度损失

基本数据类型的包装类

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面
向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设
计类时为每个基本数据类型设计了一个对应的类进表示,这样八个和基
本数据类型对应的类统称为包装类

基本数据类型 包装类(包裹类型)
byte Byte
short Short
char Character
int I nteger
long Long
float Float
double Double
boolean Boolean

例如:Integer

声明

		Integer a=new Integer(12);
        Integer b=new Integer(10);

调用非静态方法

int compareTo();
boolean equals();
 //调用非静态方法
        System.out.println(a.compareTo(b));//前面大返回1,后面大返回-1,一样大返回0;
        System.out.println(a.equals(b));//比较a与b内容是否相同 与"=="要区分 返回一个boolean类型
        System.out.println(a==b);//比较a与b是否指向一个内容
        //.....

调用静态方法

Integer valueOf
int compare(int a,int b)
Integer.parseInt(String str,int radix);
     //调用静态方法
		Integer c=Integer.valueOf(12);//调用静态方法,返回一个Integer类型变量给C
        Integer d=Integer.valueOf("10");//调用静态方法,把字符串类型(必须是数字)转换为Integer返回一个Integer类型变量
		Integer.parseInt(String str,int radix);//把radix进制对应的str转化为十进制
        System.out.println(Integer.compare(13,10));//前面大返回1,后面大返回-1,一样大返回0;

        System.out.println(Integer.max(13,10));//返回较大的数值
        System.out.println(Integer.valueOf(10));//返回的是引用类型

装箱和拆箱

  • 装箱:

将基本类型可以自动转换为包装类型

Integer a=10;//默认调用Integer.valueOf(a)把10转化为引用类型即Integer类型
  • 拆箱:

将包装类型转化为基本类型

int c=a.intValue();//拆箱
int c=a;//自动拆箱
源码: 
public static Integer valueOf(int i) {//low:-128;high:127
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);    
    }

        Integer a=10;//默认调用Integer.valueOf(a)
        Integer a=10;
        Integer b=10;
        System.out.println(a.equals(b));//结果为true
		System.out.println(a==b);//结果也为true
		Integer c=128;
        Integer d=128;
        System.out.println(c==d);//结果为false
        System.out.println(c.equals(d));//结果为true

由源代码可知,当在方法内部对 -128~127之间进行缓存(数组),在此期间的自动装箱,不会创建新的Integer对象,直接从中获得,(因为a与b传过去对应i的参数都为10,则返回的是同一个对象地址的引用),而超出此区间的每次都会返回新的对象(所以c和d虽然值相等但是返回的都是一个新的对象地址,所有c==d结果为false)

posted @ 2024-05-25 21:06  Yang0710  阅读(6)  评论(0编辑  收藏  举报