Java零基础课程笔记(三)——Java数据类型划分

1. 数据类型划分

1.1 java数据类型划分(牢记

在java中数据类型分为两大类:

数据类型 表示 默认值
基本数据类型 数值型:表示整数或小数
整型 byte、short、int、long 0
浮点型 float、double 0.0
字符型 char ‘\u0000’
布尔型 boolean false
引用数据类型 数组、类、接口 null

基本数据类型有可表示的数据范围:

  • byte:-128~127
  • int:-2147483648~2147483647

数据类型选择原则:

  • 在程序开发中,整数选择int,描述小数使用double
  • long一般描述日期时间、内存或文件大小(字节)
  • 若需要进行编码转换或进行二进制传输,使用byte
  • char一般在描述中文的时候使用
  • boolean在描述程序逻辑时使用

1.2 整型

  在Java程序中任何一个整数的常量类型都是整型。

范例:定义一个整型变量

代码

public class Test{
   public static void main(String args[]){
              //10是一个整数(不会改变的数据是常量)
              //程序之中任何一个整数对应的类型都是int
              int num= 10;//声明一个int型变量
              //num是in图形变量*2是int型常量,int*int还是int
              System.out.println(num*2);  
      }
} 

数据溢出指:当已经达到了整型的最大或最小值,如果继续进行数学计算而可能产生的错误数据。 变量命名要求:第一个单词的字母小写,后面单词首字母大写,eg: maxValue

范例:观察溢出

代码:

public class Test{
   public static void main(String args[]){
            int maxValue =  Integer.MAX_VALUE;//取得最大值
            int minValue = Integer.MIN_VALUE;//取得最小值
            System.out.println(maxValue);//2147483647
            System.out.println(minValue);//-2147483648
            System.out.println(maxValue+1);//-2147483648数据溢出为最小值
            System.out.println(minValue -1);//2147483647数据溢出为最大值
      }
} 
  • int 和 Integer区别简述:为了编程的方便引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每 一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer。int 是基本类型,直接存数值,进行初始化时int类的变量初始为0。Integer是对象,用一个引用指向这个对象,Integer的变量则初始化为null。

发现当已经超过了数据类型的局限之后,数据的计算会出现偏差,在操作前预估数据大小。int会存在溢出,需要解决溢出问题,解决方案只有更换更大的数据类型就是long类型。
范例:使用long解决int数据溢出问题

代码:

public class Test{
  public static void main(String args[]){
            int maxValue =  Integer.MAX_VALUE;//取得最大值
            int minValue = Integer.MIN_VALUE;//取得最小值
            System.out.println(maxValue);//2147483647
            System.out.println(minValue);//-2147483648
            long result = maxValue + 1;
            System.out.println(result);//-2147483647
      }
} 

在使用此类发方式解决问题,要注意,程序的执行方式是由等号的右边到左边,如果继续使用int进行计算,计算结果依然会有溢出,首先将其中的一个变量做类型的扩充,而扩充的类型有两种实现方式:

  • 直接将int变量的内容复制给long变量

代码

      long result = maxValue;//将int的数据变量赋值给了long
      //result为long,+1为int,long+int=long
      System.out.println(result+1);//2147483648
  • 直接将某一个int型的变量变为long型

代码

public class Test{
  public static void main(String args[]){
            int maxValue =  Integer.MAX_VALUE;//取得最大值
            int minValue = Integer.MIN_VALUE;//取得最小值
            long result = (long)maxValue + 1;
            System.out.println(result);//2147483648
      }
} 

数据类型可以由小变大,也可以实现由大变小:强制类型转换,强制的结果会丢内容。
范例:数据类型强制转换

代码

public class Test{
  public static void main(String args[]){
       // long num = 2147483648;
       // 任何整数其默认类型都是int,但该数据已经超过了今天的范围
       // 那么现在需要将这个数据明确的表示是一个long型的常量,在尾部加上L或l。
        long num = 2147483648L;
        // 在强制的时候设置其目标类型,这种操作有可能会丢失精度。
        int result = (int) num;//大类型变小类型,必须强制
        System.out.println(result);//-2147483647
      }
} 

在开发中没特殊需求不要强转
+ 范围小的数据类型可以自动变换为范围大的数据类型
+ 范围大的数据类型变为范围小的数据类型需要进行强制转换

说明:关于数据类型默认值问题
所有数据类型都有其默认值,但是这个默认值在方法的声明中无效
范例:观察一个错误程序

代码

public class Test{
  public static void main(String args[]){
          int num;//定义一个num变量
          System.out.println(num);//编译出错
      }
} 

两种解决方案:

  • 在使用前进行赋值(在老版本JDK会出错)
    代码
public class Test{
  public static void main(String args[]){
          int num;//定义一个num变量
          num = 10;在num输出之前为其赋值
          System.out.println(num);//输出10
      }
} 
  • 在定义变量时进行赋值
    代码
public class Test{
  public static void main(String args[]){
          int num = 10;//定义一个num变量,同时初始化
          System.out.println(num);//输出10
      }
} 
byte数据类型(-128~127): 范例:声明byte

代码

public class Test{
  public static void main(String args[]){
         byte data  = 10;
         //10是int,int的范围大于byte,理论上需要强制类型转换,但这里没有转换,因为其数据量符合byte要求
          System.out.println(data);//输出10
      }
} 

代码

public class Test{
  public static void main(String args[]){
      /*   byte data  = 128;
          //大于byte
          System.out.println(data);//错误:不兼容数据类型
     */
          byte data  = (byte) 128;
          //大于byte,强转
          System.out.println(data);//-128
      }
} 
`注意`如果要将int常量直接赋给byte变量,那么只能是int常量,不能是int变量。

代码

public class Test{
  public static void main(String args[]){
          int num = 10;
          byte data  = (byte) num;
          System.out.println(data);//10
      }
} 

1.3 浮点类型

描述小数,默认数据类型使用double 定义小数:

代码

public class Test{
  public static void main(String args[]){
          double num = 10.2;// 这是一个小数,默认类型为double
          //num是double型 * 2 int型 = double型
          // num * 2.0(由nt变为的double型)
          System.out.println(num * 2);//-128
      }
} 
double可以保存的数字式最大的,也就是说double可以保存全宇宙中最大的有意义的数,除了double外也可用float描述小数,数据范围double>float,若直接声明float变量,要求在定义时进行强制转换:需要给数字后加上F或f,或在数字前加(float),如float f = 2.23f; float f = (float) 2.23;。

代码

public class Test{
  public static void main(String args[]){
          float f1 = 1.1f;
          // float型*int常量 = float型
          System.out.println(f1 * 2);// 2.2
          System.out.println(1.1 * 1.1);//1.21000000000000002,传统bug
      }
} 
小数问题,考虑整型计算问题

代码

public class Test{
  public static void main(String args[]){
          int a = 10;
          int b = 4;
          // int / int = int
          System.out.println(a/b); // 2,若要进行准确运算,则必须保证有一个double型或float型
          System.out.println(a/(double)b); // 2.5
      }
} 
进行除法计算时,要注意数值类型。

1.4 字符型

会使用字符型的概念,但操作很少。 字符型使用char进行表示,使用单引号进行声明字符变量的内容,字符型可与int型互相转换。

代码

public class Test{
  public static void main(String args[]){
         char c = 'A';// 定义字符
          System.out.println(c); // A
      }
} 
麻烦在于,字符型可与int型互相转换,所有字符在程序中通过编码描述,char的变量变为int内容的时候,其所包含的就是编码。 范例:观察编码的出现

代码

public class Test{
  public static void main(String args[]){
         char c = 'A';// 定义字符
         int num = c;// 将字符变为int型
          System.out.println(num); // 65
      }
} 
常用范围:
  • 大写字母(A-Z):65(A)~90(Z)
  • 小写字母(a-z):97(a)~122(z)
  • 字符数字(‘0’-‘9’):48(‘0’)~57(‘9’)

大小写字母转换(大写字母与对应的小写字母差32)

代码

public class Test{
  public static void main(String args[]){
         char c = 'A';// 定义字符
        // char + int = int
         int num = c + 32;// 将字符变为int型
         System.out.println(c); // A
         System.out.println(num); // 97
        // int转char需要强制类型转换
         char x = (char) num;
         System.out.println(x); // a
      }
} 

实际上各个语言都有相似的编码,以前学的语言为ASCII码,而Java使用的是UNICODE编码,这种编码包含有ASCII码的部分内容,但它所包含的内容有多于ASCII码。UNICODE编码使用十六进制编码,这个编码可以保存任何的文字信息,包括中文。
范例:保存中文字符

代码

public class Test{
  public static void main(String args[]){
         char c = '周';
         int num = c;
         System.out.println(num); // 21608
         int num2 = c + 32;
         System.out.println((char) num2); //咈 
      }
} 

由于Java中对char特性支持比较好,所以有神奇的用法。
范例:神奇的JAVA
代码截图:

代码截图
结果

结果
这样就打破了命名标识符,但是不要用。

1.5 布尔型

一般布尔类型表示逻辑观察结果
范例:观察布尔型的操作

代码

public class Test{
  public static void main(String args[]){
         boolean flag = 10 > 2;// true
         if (flag) {// if语句需要使用布尔条件
         System.out.println("true!"); //true!
            }        
      }
} 

关于布尔型内容的说明:
由于其他语言中没有布尔型的数据,会使用数字来描述布尔型,例如:0表示false,非0表示true,但是Java没有这样的概念,即boolean的值只有true和false,不能赋0,1。

1.6 初见字符串

char可以描述的只是单一的字符,但现在若想描述出多个字符,就必须利用字符串这一概念解决。例如定义表示人姓名的变量,很明显是多个字符,就必须使用String来描述。但是需要说明的是,String并不是基本数据类型,他是一个引用数据类型,但它的特殊在于可以使用基本数据类型的使用模式来进行套用。
范例:观察String型变量

  • String变量上也可以使用‘+’,一旦使用了‘+’则描述的是两个个字符串的连接

代码

public class Test{
  public static void main(String args[]){
         String name = "lala";//定义了一个String
         String note = "qlql";//定义了一个String
         System.out.println(name + note); // lalaqlql 
      }
} 

加号一般表示数学计算,但在String中表示字符串的连接,如果两类情况同时出现呢?
范例:观察‘+’问题

代码

public class Test{
  public static void main(String args[]){
        int numA = 10;
        double numB = 20.1;
       //此时不是数学计算,而是连接
        String result = "数学计算:" + numA + numB ;
        System.out.println(result); // 数学计算:1020.1
       /*   
             String result = "数学计算:" + numA - numB ;
             System.out.println(result); // 编译出错  
       */
      }
} 

此时的计算结果为字符串的连接,一旦在在String中出现“+”,则String中所有的数据类型都变为String型。(所有类型只要与String发生“+”操作,都变为String类型后在连接)如果想要得到正确的计算结果,就要使用括号来解决问题。

代码

public class Test{
  public static void main(String args[]){
        int numA = 10;
        double numB = 20.1;
       //此时不是数学计算,而是连接
        String result = "数学计算:" +( numA + numB );
        System.out.println(result); // 数学计算:30.1
      }
} 

在程序中有转义字符的概念:换行(\n),制表符(tab、\t),双引号(\”),单引号(\’),(\),转义字符用于控制字符串输出,在基础阶段有用,实际开发中没太大意义。

2 总结

1.现阶段所考虑的数据类型为:int ,double,boolean;
2.操作的数据请保证有意义,就刻意回避数据范围的问题;
3.使用"声明的为字符串,字符串使用String来定义类型。

展开阅读全文

没有更多推荐了,返回首页