JAVA数据类型详解

JAVA学习笔记–数据类型

数据类型分类:

img

基本数据类型:

单位: bit/位,如0/1

类型名称类型定义取值范围
byte8位有符号整数-128 ~ 127
short16位有符号整数-32768~ 32767
int32位有符号整数(-2)^31 ~ 2^31 -1
long64位有符号整数(-2)^63 ~ 2^63 -1
float32位浮点数1.4E-45 ~ 3.4028235E38
double64位浮点数4.9E-324 ~ 1.7976931348623157E308
char16位字符0 ~ 65535
boolean布尔值true/false

注意:

(1)Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的“E+数字”表示E之前的数字要乘以10的多少倍。

比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。

(2)Java语言中,默认的整数类型是int类型,声明long类型的时候,后面必须要加个l(字母L的小写)或者L,建议使用大写L,防止和数字1混淆,如:long a=30L;

(3)Java语言中,默认的浮点数类型是double,声明float类型的时候,后面必须添加字母f或者F,如 double num1=3.14; float num2=3.14F / 3.14f;

(4)Java语言中,char类型为16位Unicode字符,Unicode字符中的取值不存在负数范围,所以它的取值范围为 0 ~ 65535,—— 有点类似 “无符号数”;

(5)java语言中,不可以用0或非0的整数替代false和true,这点和c语言不同

(6)java语言中,布尔类型不参与基本数据类型转换

基本数据类型转换:

  • 自动转换(隐式转换):

    当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型。

    • char -> int -> long -> float -> double

    • byte -> short -> int -> long -> float -> double

    • img

      //隐式转换
      int a='c'; //字符->整型
      double d=80;//整形->双精度浮点数
      
    • 当有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后进行计算。

    • (byte、short)和char之间不会自动转换,但可以计算,计算时首先转换为int类型在进行计算。

  • 强制转换(显示转换):

    • 从储存范围大的数据类型到存储范围小的数据类型,可能存在精度丢失

    • double -> float -> long -> int -> short -> byte

    • short a = 3;
      // 强制类型转换
      byte b = (byte)a;
        
      int i = 98;
      // 强制类型转换
      char c = (char)i;
      

引用数据类型:

字符串类:
  • String是一个final类,代表不可变的字符序列,字符内容存储在一个final字符数组value[]中。

  • 声明与创建: String 字符串名= “字符串常量”;// 存储在方法区常量池

    ​ 字符串名=new String(字符串常量);//存储在堆中

    String name;
    name="Ding";  //  name=new String(Ding);
    
  • 基本数据类型转化为String类:String 字符串名= 基本数据类型的值 + “”;

    int n1=100;
    float n2=1.1f;
    double n3=3.4;
    String str1=n1+"";
    String str2=n2+"";
    String str3=n3+"";
    
  • String类型转化为基本数据类型:基本数据类型.parse数据类型(“字符串常量”);

    Integer.parseInt("123");
    Double.parseDouble("123.23");
    
  • 程序中 +号的用法:从左到右计算,当两边都是数值型时,做加法运算,当两边一方为字符串时,做拼接运算

    System.out.println(100+98);//198
    System.out.println(100+"98");//10098
    System.out.println(100+98+"hello");//198hello
    

基本数据类型与引用数据类型的区别:

  • 定义类型不同:

  • 赋值:

    • 基本数据类型:在线程栈中直接申请空间进行赋值,在栈中存储值,赋值时之间在栈中进行更改。

      int a=10;
      int b=a;
      b=100;
      //a=10,b=100 基本数据类型存储在栈中,具有独立的存储空间
      
    • 字符串类:在线程栈中申请空间,但是在公共堆中开辟空间存储字符串常量,栈中只存储堆中空间的首地址。赋值时根据栈中存储的地址在堆中进行赋值更改,栈中存储的地址不变。字符串默认为NULL,不指向堆中空间。

      • 创建时用new

        //字符串声明在存储在堆内存中
        //开辟一个空间
        String str1="abc";
        String str2=str1;//存储的地址相同,指向堆中同一个存储空间,值相同
        str2="cba";//直接将这个地址内存储的值改变,所以str1和str2都要改变为cba
        
        //开辟多个空间
        String str1="abc";
        String str2="cba";
        str2=str1;//此时原本str2指向的堆中空间没有引用变量变成垃圾,会等待GC不定期进行回收与空间的释放
        
      • 创建时不用new

img

//通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。字符串常量池中不会存储相同内容的字符串。String str1="abc";String str2="abc";//此时str1和str2存储的地址相同str2="ding";//此时存储的地址不同
  • 比较:

    • 基本数据类型:可以直接比较,比较的是值,字符型也可以用ascll码进行比较

    • 字符串类型:直接比较时,比较的是地址,具体的比较可以用自定义的方法进行比较

      static boolean equal(String str1,String str2 ){  //因为主函数是静态的,所以自定义方法必须用静态的        if(str1==str2)     //比较地址            return true;        if(str1.length()!=str2.length())  //比较长度            return false;                    int len=str1.length(); //根据字符串长度,进行遍历比较        for(int i=0;i<len;i++){        	if(str1.charAt(i)!=str2.charAt(i))            return false;            }            return true;        }        //可以直接用 equals()  函数String str1;String str2;boolean b=str1.equals(str2); //返回true或者false
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值