Java数据类型与常量变量
Java数据类型与常量变量
数据类型:
分两种:基本数据类型、引用数据类型
基本数据类型:8个
bit在计算机技术中意为“比特,位”,指最小的二进制单位
- 整型(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次方 (内存空间)
- 浮点型(2个):用来存储小数的 由小到大àfloat单精度 double双精度
float: 4字节=32bit
double: 8字节=64bit
- 字符型(1个): char(字符,只要键盘能输出的都算字符)
Unicode编码 :范围没有负数,所以范围为0~65535
字符:字符中数字和整数的数字冲突,为了以示区分,每一个字符的前面各加单引号
产生一个问题:为什么英文和符号和数字是一个字节,而为什么中文是两个字节?
解决:ASCII:美国信息交换标准代码
Unicode是一个编码方案,Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码
中文比较复杂,所以一个字节不行,就用了两个字节
- 布尔型(1个): boolean(值true false)
1bit
引用数据有类型:
- 数组[]
- 类class(抽象类abstract class)
- 接口interface
- 枚举enum
- 注解@interface
常量和变量
常量:指的是程序在执行运行当中不能再次改变的值 (指的是值)
作用:1.固定的值 代表计算过程中经常用到的值(比如圆周率 3.14159265···)
2.用来代表一个含义
什么样的值算是常量???
- 固定不变的值,算做常量(1、3.14 、”a”、true 等等),可以认为所有写好的基本类型的值(固定不变)就是常量。
- 特殊的常量
字符串(”ABC”)àString(String属于引用数据类型,它的值很特殊,可以简单的视为常量)
- 自己创建的空间,存储一个值,让它固定起来,不能改变
比如一个变量 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、我们写好的指令,执行内存的空间(赋值、变化。。。)
源码编译执行---内存空间问题
常量存储在常量缓冲区(常量池当中),有且只有一份。
常量池中的值默认空间大小 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)