java学习笔记之变量与数据类型

标识符

变量和类的名字  int a = 3; 就是标识符
可是字母,下划线开头的由字母,下划线,数字和$组成的字符集,不能是java中的关键字,如public  class等

数据类型

基本类型

  • 整数
         byte 一个字节(8位二进制表示)  表示的范围是-128 ~127  //中间还有0
         short  两个字节(16位表示) 表示的范围是-256 ~255
         int  四个字节  表示范围 -2E31 ~2E31-1   //java可用科学计数法表示,System.out.println(412e-2);结果4.12
         long 八个字节  当要表示一个大于该范围的数,;在java中整数常量默认是int类型

      这个数超过了int所能表示的范围,所以需要转换类型,这里不建议加小写的l,容易混淆;

      在java中可以调用BigInteger类来表示超过long表示范围的数字;

                 java默认的数字常量都是十进制,那么要表示八进制,如下:
                       
                 int a = 010;//数字前面加0,至于用哪个类型来定义,依旧取决于数字的大小,输出是8
  
                要表示十六进制,如下:

                 int a = 0x10;//数字前面加0x,输出是16

                要表示二进制,如下:
      
                int a = 0b 000011000; //数字前面加0b

但是输出用不同进制表示的数都是十进制

  • 浮点类型   
        float: 4个字节 表示范围-3.403e38 ~ 3.403e38  

                    可以看到虽然float和int都是用4个字节来表示,但是float的表示范围远远大于int,这是因为浮点数存在舍入误差;
                    在java中默认的小数是double类型,如float f = 4.14      //提示错误,类似long那块提到的
                                                                              float f = 4.14f    //正确,相当于做了类型转换

       double:8个字节 这两种小数类型都存在误差,要想精确的表示,java中可以调用BigDecimal;
    
  • 布尔型
         boolean 取值 true或者false,最多用在判断、循环条件里。 它在java中仅用一位来表示;
  • 字符型(在c中字符型和字符串都属于基本数据类型,但是在java中字符串String是一个独立的类)
        java中采用了Unicode字符集,是通用的,基本包含了所能用到的所有字符,一个字符两个字节,所以char类型的是两个字节,能表示65536个字符;
      char类型的可以当做整数直接进行运算:char c = ‘A’;
                                                                   int a = c+2;  //给字符类型的变量做加法,结果是一个整数类型int,输出整数
                                                                   char = (char)(c+2);  //通过强制转型,也可以把结果转化成字符类型

引用类型

        包括类和接口,后面会讲到;

类型转换

自动转换

容量小(容量指的是表示的范围不是表示位数)的可以自动转化成容量大的,因为就不会存在放不下的问题,这个好理解;
long(8位表示) 可以自动转换成float(4位表示) // float表示的范围更大,但是可能会丢失精度

short a = 100;
int b = a; //正确

强制转换

那么容量大的向小的转换就必须强制转换,方法如上面提到的int转换成char是一样的;

但是如果一个变量已经超出了你要强制转换的类型的表示范围,也能运行,但是java会输出一个毫无意义的值:

类型提升


在做二元运算的时候(+-#/ %),会有类型提升的问题:

  int a = 3;
  long b = 4;
  int c =a+b;  //提示错误,做了运算之后的结果提升为long类型的,除非强制转型
  long c = a+b; //正确
但是如果是这样:可以看到两个int类型的变量做运算,结果应该是int类型的,但是又超出了int的表示范围,输出一个无意义的值



那么把结果直接定义成long呢?我们看到还是不行。这就需要我们做强制类型的转换,那么怎么转呢?


下图这样还是不行,因为你在强值转换时结果已经是一个无意义的数字,所以我们应该对一个因子做准换,通过计算时类型提升来得到结果


下图所示,相当于在计算前对a做了强制转换,一般我们把计算中的第一个因子做转换,因为担心连乘情况下到后面的位置已经超出范围







猜你喜欢

转载自blog.csdn.net/wangdongli_1993/article/details/79196961