Java数据类型、数据类型的转换、ASCLL码表

一、Java的数据类型

​ Java是一门强类型的编程语言,它不同于一些弱类型的语言(JavaScript、Python、PHP...)变量的类型一旦确定,则无法修改,在Java中数据类型主要包括以下两大类:

  • 基本数据类型:包括整数、浮点、字符、布尔类型。
  • 引用数据类型:包括类、数组、集合、接口等。

1、基本数据类型

  • 整数型 默认值为0
数据类型 关键字 字节长度 数值范围
字节型 byte 1个字节 -128~127
短整型 shrot 2个字节 -32768·32767
整型 int(默认0 4个字节 -2的31次方~-2的31次方-1
长整型 long 8个字节 -2的63次方~2的63次方-1
  • long(8字节=64bits)long类型数据在赋值时必须在数据值末尾追加一个“L”(大写)

  • 浮点型 默认值0.0

数据类型 关键字 字节长度 范围
单精度 float 4个字节 1.4013E-45~3.4028E+38
双精度 double(默认) 8个字节 4.9E-324~1.7977E+308
  • float(4字节=32bits)float类型数据在赋值时,必须在末尾追加“f”或“F”

  • 布尔型 默认值false

数据类型 关键字 字节长度 范围
布尔类型 boolean 1个字节 true false

关于char类型
“\”在java中是一个转译符号,可以将斜杠之后的内容转译为特殊符号,如:
\n 换行
\t 制表符
\b 退格

注意事项

​ 在对浮点数操作时。可能会由于计算机进行运算时精度丢失问题,导致实际结果跟预期结果不一致,例如:

   //对于两个double类型/float类型的数计算,由于计算机在计算时会缺失精度
   //不是预期的0.3,建议对于浮点数计算使用java.math.BigDecimal(引用数据类型)
  double d1=0.1;
  double d2 = 0.2;
  double d3 = d1 + d2;
  System.out.println(d3);//实际结果为:0.30000000000000004 而非预期的 0.3
          float f1=0.2f;
          float f2=0.3f;
          float f3=f1-f2;
          //结果 -0.10000000001
         System.out.println(f3);

​ 因此,在涉及到一些比较敏感的(金额)浮点数据时,不能够使用double或者float;在实际项目中对于这些敏感的浮点数会使用Java.math.BigDecimal(引用数据类型)

2、引用数据类型

​ java中的数据类型除了8基本类型数据外,其余的数据类型都是引用类型,常用的引用类型:类,数组,接口等

​ 以 类 举例

创建学生类 在一个类中会包含一些变量(全局变量)和一些方法

public class Student{
//定义的一个字符串变量
    String  stuname=“张三”;
    char sex='男';
    int age=20;     
 //定义一个方法
   public void showInfo(){
 	 System.out.println(syuname);
 	 System.out.println(sex); 	
     System.out.println(age);        
    }
}

如何使用这个学生类型(引用数据类型)

public static void main(String[] args){
    //定义学生类型  引用数据类型需要创建  引用对象
    //引用数据类型   变量名= null
    //基本数据类型    变量名=初始值
    //对于类的创建
    //类名  对象名 =  new   类名();
    student  stu= new Student;
    //对象名。方法名();
    stu.showInfo():
}

引用数据类型和基本数据类型的区别?

  1. 创建方式不同,基本数据类直接通过定义变量的方式创建,而引用数据类型需要new一个对象
  2. 在JVM的内存分配不同,基本数据类型的内存在栈内存中直接创建,而引用数据类型是在栈内存中定义引用的地址,实际的内存分布在堆内存中
  3. 引用数据类型,可以调用它的方法,而基本数据类型没有

引用数据类型的内存分布图

基本数据类型的内存分布图

二、java的数据类型的转换

为什么需要数据类型转换?

​ 在Java中数据进行计算时,必须要求计算的元素的数据类型一致,如果数据类型不一致需要进行转换

数据转换分类

1、自动类型转换

​ 转换规则:范围小的类型向范围大的类型(从小到大)

​ byte—>short—>int—>long—>float—>double

布尔类型不参与转换

2、强制转换类型

  • 整数与整数之间的强转
public static void main(String[] args) {
//int类型
int i=1;
//byte  类型
byte j=100;
//由于i和j不同类型, 不能直接计算,程序会自动将j的类型向上提升为int类型
//所以i+j之后依然时 int类型
//此时  int的内存的阿玉byte的内存  会出现数据溢出的情况,JVM不允许
//byte s=i+j;   等号两边类型不匹配
int y=i+j;
    System.out.println(y);
    //如果一定要使用byte赋值  还有一种办法  就是将两边的类型一致
    byte s=(byte)(i+j);   //两个数再相加时  会先自动提升到int类型  然后再相加
}
  • 整数与小数之间的强转
//整数和小数之间 也会丢失精度
int n2=100;
double n3=3.5;
int n4= (int)(n2+n3);
//相加时先提升为double类型,然后相加后得到double类型
//double时8个字节  不能放在4个字节的长度中
//(这里好比double为一桶水   int为一杯水  相当于将一桶水倒入一杯水中)
//只能留住一杯水的内容  所有 这里如果强转int  小数会丢失精度0
System.out.println(n4);
  • 小数与小数之间的强转
//  float  与  double  类型
    float f1=3.14f;
    double d2=3.5;
    double dd=f1+d2;
    float ff=(float)(f1+d2);
  • 丢失精度的情况
  // 强转时会丢失精度
    byte n = 100;
    int  m = 30;
    byte mm = (byte)( n + m); // 因为最大值为127  再往后就是从最小值开始-128
    System.out.println(mm);
    // 整数和小数之间 也会丢失精度
    int n2 = 100;
    double n3 = 3.5;
    int n4 = (int)(n2 + n3);

三、Java的字符和ASCLL码表

字符 int值
a 97
A 65
0 48
依次小写字母往后都是数字,例如b为98,C为99...
A:65 B:66 C:67 0:48 1:49 2:50 .....



  • 字符与数据的转换
public static void main(String[] args) {
    //int   与   char类型的转换
    //每一个char类型都有一个ASCll码表
    char c='a';
    //自动提升:因为char类型占2个字节  int占4个字节
    int n=c;
    System.out.println(n);
    //先相加 在转换
    char c2=(char)(n+2); //需要强转
    //字符+字符
    char c3='a'+'b';
    System.out.println((int)c3);
}
posted @ 2020-09-30 16:29  醉心人灬  阅读(494)  评论(0编辑  收藏  举报