Java数据类型与常量变量

                                                                         Java数据类型与常量变量

数据类型:

分两种:基本数据类型、引用数据类型

基本数据类型:8个

bit在计算机技术中意为“比特,位”,指最小的二进制单位

  1. 整型(4个):由小到大àbyte字节型 short短整型 int整型 long常整型

byte: 字节型,一个字节由8个bit来表示的,每一个bit是敏感的单元位,

     1byte =8bit  00000000  256中组合

     用第一个bit位置来记录符号 0正数 1负数

     数值范围 -2的7次方 ~ 2的7次方-1  -128~127(内存空间)

以上其他整数类型依次乘2

short: 2字节=16bit  65526种组合 -32768~32767(内存空间)

int: 4字节=32bit  2的32次方    -2147483648~2147483647(内存空间)

long: 8字节=64bit  2的64次方 (内存空间)

 

  1. 浮点型(2个):用来存储小数的  由小到大àfloat单精度 double双精度

float: 4字节=32bit

double: 8字节=64bit

 

  1. 字符型(1个): char(字符,只要键盘能输出的都算字符)

Unicode编码 :范围没有负数,所以范围为0~65535

字符:字符中数字和整数的数字冲突,为了以示区分,每一个字符的前面各加单引号

产生一个问题:为什么英文和符号和数字是一个字节,而为什么中文是两个字节

 解决:ASCII:美国信息交换标准代码

Unicode是一个编码方案,Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码

中文比较复杂,所以一个字节不行,就用了两个字节

 

  1. 布尔型(1个): boolean(值true false)

1bit

引用数据有类型:

  1. 数组[]
  2. 类class(抽象类abstract class)
  3. 接口interface
  4. 枚举enum
  5. 注解@interface

 

常量和变量

常量:指的是程序在执行运行当中不能再次改变的值 (指的是

  作用:1.固定的值 代表计算过程中经常用到的值(比如圆周率 3.14159265···)

        2.用来代表一个含义

  什么样的值算是常量???

  1. 固定不变的值,算做常量(1、3.14 、”a”、true 等等),可以认为所有写好的基本类型的值(固定不变)就是常量。
  2. 特殊的常量

字符串(”ABC”)àString(String属于引用数据类型,它的值很特殊,可以简单的视为常量)

  1. 自己创建的空间,存储一个值,让它固定起来,不能改变

比如一个变量 int a=1;在前面加一个final int a=1;就把值固定起来了

 

变量:指的是程序在执行运行当中可以改变的值

      变量是一个内存空间(小容器),变量空间在创建(声明)       的时候,必须指定数据类型,变量空间里面只能存储一个内容(值、引用),变量空间内的内容可以改变。

 

===========================================================

 

变量如何创建/声明

   数据类型 变量名称;(int a; String b;)

 

创建变量是需要注意命名问题

   命名的规则:字母(大小写敏感à区分大小写) 数字(0-9不允许开头) 符号(英文符号_  $) 中文(不推荐)

   命名的规约:(所有名字需要见名知义,为了程序的可读性)

         类名字:首字母大写(如果两个以上的单词,所有首字母都大写)

         变量名:首字母小写(如果两个以上的单词,之后的首字母大写,遵循驼峰式命名                 规约 例如superPerson)

 

   需要注意:1、变量是一个空间,可以       只创建空间,里面不存放内容

             2、变量空间创建后是没有默认的内容,空的

             3、空的变量空间不能拿来使用(会编译错误)

           例子:

           byte x;//声明一个变量空间,空间的名字是x,空间内要求存储的类型是byte整型

           x=1;//将一个1赋值到x空间内进行存储(byte x =1; // 是注释,增强代码的可读性) 

 

  重点:      计算机底层做了什么事情

             1、x是什么?变量空间     存在哪儿?

             2、1是什么?1是常量    存在哪儿?

             3、=是什么? =是赋值    做了什么

  答案:1、硬盘上创建了一个文件  Test.java

        2、文件中内容是我们编写的源代码(跟计算机发送指令)

             public class Test{

                     public static void main(String[] args){

     byte x=1;

}    

}

        3、将Test.java源文件à编译àTest.java(内容我们看不懂,字节码留给计算机识别)

4、执行à内存中执行(将硬盘上的Test.class内容,加载到内存里)

5、我们写好的指令,执行内存的空间(赋值、变化。。。)

 

    源码编译执行---内存空间问题

Java数据类型与常量变量

常量存储在常量缓冲区(常量池当中),有且只有一份。

常量池中的值默认空间大小 32bit---int,为了保证精确程度 64bit---double

 

1、单行注释 //    2、多行注释 /*  */    3、文档注释 /**  */

 

问题:例子 float e = 3.4 能这样写吗?不能

      从double转化到float会有损失

      1 和 3.4 是常量

      存储在常量缓冲区中,常量值存储形式肯定不是十进制,是以二进制存储

      1到底用多少二进制来表示?

常量区存储形式二进制形式如果是整数,它认为一个int类型取值范围够了,所以整数以32bit的形式来存储的

比如小数,它为了保证精确程度更高,用的是64bit的形式存储

1à32bit(相当于int类型)  3.4à64bit(相当于double类型)

答案:所以说float 32bit太小了,所以呢等使用double类型。或者也可以认为float类型够用了,就是精度有点高,所以人为的得告诉它一声,降低精度,要在3.4后面加上F。

 

但又产生了一个问题:例子 byte a =1就可以使用呢?

答案:

1à32bit

00000000 00000000 00000000 00000001

aà8bit

00000001

就是=(等号)赋值的时候做了一个自动的决定,自动类型转换化,强制砍掉了24位无用的0,前提是24位都是0,如果某一端有个1就砍不掉了。

 

又产生了一个问题:long a =2147483648; 赋的值大于int类型的取值范围,但这个取值范围在long中也可以存着,为什么会报错呢?

  答案:在常量区当中,在描述需要某个数值就给你创建某个数值,等运行的程序就执

行出去了,在翻译的时候就会认为int类型是不是太大了,是不是输入的时候打错了,所以不会帮你编译,并且不会放到常量区去。

       所以要认为告知不是我写错了,就是我要的数值。long类型的值后面加L。

float类型值后面F大小写都没问题,可long类型小写的L更I的小写几乎一

样,所以建议都用大写。注意当long的赋值常量范围大于int类型范围的时候才加F

 

 

字符(char类型)

  char类型,属于基本数据类型,用单引号,单引号里面只能是一个字符,单引号里面不能不写,必须写一个字符。(如“a”)

 字符串(String)

  String类型,属于引用数据类型,用双引号,双引号里面可以是多个字符,双引号里面能不写,叫空字符串。(“a”、“abc”、“”、null)