zoukankan      html  css  js  c++  java
  • Java数据类型

    一、首先大概了解一下关于数据的内容或要点。

      1、程序在执行的过程中,需要对数据进行运算,也需要储存数据。这些数据可以是由使用者输入,也可以是从文件中取得的,也可以是从网络中获取的。在程序运行的过程中,这些数据通过变量储存在内存中,以便程序随时使用。

      2、若需要找到储存在内存中的数据,就需要将数据指定给变量,并命名,通过变量名(储存数据的内存空间)来找到相关数据。

      3、一个变量代表一个内存空间,数据就储存在这个空间中,然而由于数据在储存时需要的容量各不相同,不同的数据就必须要分配不同大小的内存空间来储存,因此,对不同的数据用不同的数据类型来区分。

      4、基本数据类型的数据所占的内存空间是固定的,在内存储存的是数值的本身,而引用数据类型存放的是指向该数据指向的地址,往往是由多种基本数据类型组成的,对引用数据类型的数据应用为对象的引用,所以也被称为复合数据类型。

    二、Java的数据类型可以基本地分为8种基本数据类型和引用数据类型。

      1、下面的表格是Java数据类型的总结:

    数据类型 关键字 占用字节数 默认数值 取值范围 封装类
    逻辑型 boolean 1 false true;false Boolean
    字节型 byte 1 0 -27~27-1 Byte
    短整型 short 2 0 -215~215-1 Short
    整型 int 4 0 -231~231-1 Integer
    长整型 long 8 0L -263~263-1 Long
    单精度浮点型 float 4 0.0f

    负数范围:-3.4028235E+38~-1.4E-45

    正数范围:1.4E-45~3.4028235E+38

    Float

    双精度浮点型 double 8 0.0d

    负数范围:-1.7976931348623157E+380~-4.9E-324

    正数范围:4.9E-324~1.7976931348623157E+308

    Double

    字符型 char 2 'u0000'

    'u0000'~'uffff'

    Character

        所以:boolean、byte<short、char<int、float<double、long

      2、一个整型数隐含为整型(int)型,当要将一个整数强制表示为长整型时,需要在数值的后面加上L,所以若声明long型变量的值超过int型的取值范围时,如果数的后面不加上 “l”或者“L”,系统会认为是int型而出错。而一个浮点数隐含为double型,若在一个浮点数后加上“f”,或者“F”,将其强制转成float类型,所以声明的时候,需要在数值的后面加上“f”。“F”,否则会默认是double类型而系统会出错。

      3、boolean类型的只有true or false ,不能转成数值类型。一般用于逻辑型的控制语句中,如if,for,while语句中。

      4、char字符型,储存的单个字符。Java语言中字符采用的是Unicode字符集编码,在内存中栈两个字节,可以储存Unicode字符集中,每一个字符,包括汉字。注意的是在char类型声明的是单个字符,所以必须使用单引号括起来,若要取Unicode字符集的值时就必须强换转int类型,如(int)‘a’,其值介于0-65535之间,相反若要取某一值对应在Unicode集中的字符时就必须将整型强转成字符型,

        如int c=20300; char s =(char)c。

      5、引用类型(对象类型):最常用的特殊String(字符串),类,接口,数组等。在之后的数组、字符串和面向对象会详细介绍。

    三、讨论一下java中数据类型存储的位置(这里是引用其他大神的来理解理解,总结的还是不错的)

          基本数据类型存储位置,取决于基本类型在哪声明:
               1.基本数据类型在方法中声明时,其变量名和值都是存储在java栈中的;
                     在方法中声明基本类型数据:
                          例: int  a = 10
                           ①  在栈中声明一个变量名为a的引用;
                           ②  在栈中查找是否有字面值为10的地址,如果没有就开辟一个存放字面值是10的地址;
                           ③  将变量名为a的引用指向字面值为10的地址;
     
               2.基本数据类型在类中声明时则是存储在堆内存中的;
                           ①  在类中声明的基本数据类型,在类加载时会存储到方法区中;
                           ②  在java堆中从生成代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口;
                           ③  static 关键字修饰的数据是属于类本身的,存储在方法区中;
                           ④  final 关键词修饰的数据表示引用不变的,存储在常量池中;
     
               3.基本数据类型的包装类:
                         ①  Integer i = 10; 同 i = 10 的声明过程。
                         ②  Integer i = new Integer(10);   数据10 是存储在堆中的;
      
      引用数据类型一定输存储在堆中的吗?
              1. 特殊的String类
                         例 : String str = “abc”;
                         ①  在栈中声明一个变量名为str的引用;
                         ②  在常量池中查找是否有“abc”的字符串对象,如果没有就在常量池中创建存储一个值为“abc”的字符串对象;
                         ③  将str的引用指向字符串对象“abc”;
                         ④ 当 再次声明 String str1 = "abc",常量池中已经有“abc”对象,所以str1直接指向abc的地址;
                         ⑤ str = str1,引用数据类型比较,比较的是应用的地址;
                  注: String str = “abc” 没有创建或创建一个对象
              2.其他引用类型
                        Stirng str = new String("abc");
                         ① 在栈中声明一个变量名为str的引用;
                         ② 在堆中创建存储一个字符串对象“abc”;
                         ③ 检查常量池中是否有字符串对象“abc”,如果没有就在常量池中创建存储一个值为“abc”的字符串对象;
                         ④ 将堆中字符串对象“abc”与常量池中字符串对象“abc”联系起来,可以用intern方法返回常量池中的对象的引用;
                         ④ 将str的引用指向堆中 字符串对象“abc”;
             注: String str = new String ("abc")创建一个或两个对象;
    四、数据类型转换
       1、数值型之间的转换主要分成两大类:隐含类型转换(缺省类型转换)和强制类型转换。
          隐含类型转换:简单点说就是将所占字节数比较小(简称短型)的数转换成字节数比较大(简称长型)的数。它是编译系统自动完成的,不需要程序来说明。
              byte<short<char<int<long<float<double
          强制类型转换:刚好相反是将长类型的数转换成短类型的数,而且需要特别的说明否则会出现编译错误。
              格式:(欲转换的数据类型)变量名 double a; int b = (int)a;
         总结:这里考点主要是两数相除后输出的结果是怎样,有没有小数点后的数等,等问题。将其中一个或两个都转换等,按照上面的原则细心分析就不会有错了。
       2、字符串与数值之间的转化:
          (1)、字符串转换成数值类型数据
            就是对应的封装类中都提供了该方法(包括Boolean)的。
            如:String num="123";
                Integer.parseInt(num);
                Byte.parseByte(num);
          (2)、数值型数据转换成字符串
            这里特别的简单就是用“+”和一个“”号便能实现
            如:int num = 123;
              String myNum = ""+num;
         总结:其他的也类似这样的,其实没记住具体方法不要紧,主要记得可以进行转换,可以通过查资料来使用。
    五、常量声明
        常量声明的形式与变量的声明形式基本一样,只需用关键字final标识,通常final写在最前面,如final float PI=3.14f,final int MAX = 100;
         建议常用标识符全部使用大写字母表示。并且它主要有两个好处就是:一是增加可读性,从常量名可知常量的含义;二是增强可维护性,程序中多处使用常量时,当要对它进行修改时,只需在声    明一处进     行修改就行。
    六、标识符、关键字、常用转义字符
      1、一些不常见的关键字:instanceof、volatile、assert、package、enum、transient、continue、native、synchronize、import,多记记,笔试可能会考的,其他关键字一样的中必须一眼就知道是关键字不能用来命名变量(不是做标识符)。
      2、Java中的标识符需要满足一下的条件:
        (1)、标识符可以由字母、数字和下划线(_)、美元符号($)等组成。
        (2)、标识符必须以字母、下划线或美元符号开头,不能以数字开头。
        尽量命名标识符时不要随便,要有意义,增强程序代码的可读性。而且Java中是区别字母的大小的,还有就是命名时应该遵守相应的命名规则,变量名一般小写,需要单词组合的话就是骆驼命名法
        如:firstName lastName等,package(包名)一般全是用小写,并以cn/com这些来开头,如 cn.jl.service等,还有类名,接口名就首字母大写Test.class,方法名也是骆驼命名法。
      
     
                
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/liangxiaojin/p/7425831.html
Copyright © 2011-2022 走看看