Java学习4:数据类型(上)

数据类型(上)

数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同大小的空间。
例如:
int i = 10;
double d = 1.23;
i变量和d变量数据类型不同,空间大小不同。
数据类型在java语言中包括两种:
第一种:基本数据类型
基本数据类型有可以划分为4大类8小种:
8小种:
byte,short,int,long,float,double,boolean,char
第一类:整数型:byte,short,int,long(没有小数)
第二类:浮点型:float,double(带有小数的)
第三类:布尔型:boolean(只有两个值true和false)
第四类:字符型:char(java种规定字符必须使用单引号括起来,属于文字。)
第二种:引用数据类型
字符串型String属于引用数据类型。String字符串不属于基本数据类型范畴。
java种除了基本数据类型之外,剩下的都是引用数据类型。
引用数据类型后期面向对象的时候才会接触。

计算机存储单位

整数型:byte,short,int,long有什么区别?
浮点型:float,double有什么区别?
区别就是:占用的空间大小不同。
计算机只能识别二进制。
1字节 = 8bit(8比特)-->1byte = 8bit
byte占用1个字节。short占用2个字节。int占用4个字节。long占用8个字节。float占用4个字节。double占用8个字节。boolean占用1个字节。char占用2个字节。
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

数据类型.png

二进制与十进制

十进制转换成二进制
方法:除以2,然后余数逆序输出
例如:125转换为二进制
125/2 = 62 余1
62/2 = 31 余0
31/2 = 15 余1
15/2 = 7 余1
7/2 = 3 余1
3/2 = 1 余1
1/2 = 0 余1
逆序输出:1111101
二进制转换成十进制
方法:权相加法
例如:1111101
12^6+125+1*24+12^3+122+0*21+1*2^0=64+32+16+8+4+0+1=125
十六进制:满16进1位
八进制:满8进1位

取值范围

byte类型的取值范围
byte是 [-128~127] 共可以标识256个不同的数字。
byte类型的最大值是怎么计算出来的呢?
byte是1个字节,8个比特位,所以byte可以存储的最大值是:01111111。
注意:在计算机当中,一个二进制位最左边的是符号位,当为0是表示整数,当为1时表示负数。
所以,byte类型最大值时2的7次方减1,也就是128-1=127
有几个取值范围需要大家记住:
byte(1个字节):【-128 ~ 127】
short(2个字节):【-32768 ~ 32767】 可以表示65536个数字
int(4个字节):【-2147483648 ~ 2147483647】
char(2个字节):【0 ~ 65535】 可以表示65536个数字
short和char实际上容量相同,不过char可以表示更大的数字。因为char表示的是文字,文字没有正负之分,所以char可以表示更大的数字。

字符编码

对于8种基本数据类型来说,其中byte,short,int,long,folat,double,boolean,这7种类型计算机表示起来比较容易,因为他们都是数字。其中布尔类型只有两个值true和false。实际上true和false分别在c++种对应的是1和0,1为true,0为false。
对于char类型来说计算机表示起来比较麻烦,因为char对应的是文字。每一个国家的文字不一样,文字不能直接通过自然算法转换成二进制。
所以字符编码产生了。
字符编码是人为定义的一套转换表。在字符编码种规定了一系列的文字对应的二进制。
字符编码其实本质上就是一本字典,该字典中描述了文字于二进制之间的对照关系。
字符编码是认为规定的。(某个计算机协会规定的)
字符编码涉及到编码和解码两个过程,编码和解码的时候必须采用同一套字符编码方式,不然就会产生乱码。
起初,计算机是不支持文字的,只支持科学计算。后来随着计算机的发展,计算机开始支持文字,最先支持的文字是英文,英文对应的字符编码方式是ASCII码。
ASCII码采用1byte进行存储,键盘上所有的键全部算上也不超过256个。所以英文本身在计算机方面就占有优势。
'a' ---> 97 ---> 01100001
'A' ---> 65 ---> 01000001
'0' ---> 48 ---> 00101110(这个'0' 不是数字0,是文字'0' )
'a'--采用ASCII码进行编码-->01100001
01100001--采用ASCII码进行解码-->'a'


ASCII码 对照表.png

随着计算机语言的发展,后来国际标准组织制定了ISO-8859-1编码方式,又称为lating-1编码方式,向上兼容ASCII码,但不支持中文。后来发展到亚洲才支持中文,日文,韩文....
简体中文这块的编码方式:GB2312<GBK<GB18030(容量的关系)
繁体中文:Big5(台湾使用的是大五码)
在java中,java为了支持全球所有的文字,采用了一种字符编码方式叫做Unicode编码。unicode编码统一了全球所有的文字,支持所有文字。具体实现包括:UTF-8 UTF-16 UTF-32.....。

字符型:char

char占用2个字节。
char的取值范围是 [0~65535]
char采用unicode编码方式。
char类型的字面量使用单引号括起来。
char可以存储一个汉字。一个汉字占用2个字节,char类型正好占用两个字节。

转义字符

java语言中”\“负责转义。
**加上一个特殊的字符,共同构成一个新的字符。
** 的出现会将紧挨着的后面的字符进行转义。
\t 表示制表符tab
\n 表示换行符
System.out.println();输出括号内内容之后换行
System.out.print();输出括号内内容之后不换行
如果想要在控制台输出一个 ' 字符,可以使用 System.out.println(''');
' 表示一个普通不能再普通的单引号字符。
同理如果想要在控制台输出一个 \ 字符,可以使用 System.out.println('\');
\在java中两个反斜杠代表了一个”普通的反斜杠字符“。
如果想要在控制台输出"test",可以使用 System.out.println(""test"");
"表示一个普通的双引号字符。
\u反斜杠u表示后面的是一个字符的unicode编码。
unicode编码是十六进制的。
例如:System.out.println('\u4e2d');
输出的结果是:中
在较低版本JDK(例如JDK8)中,bin目录下会有一个native2ascii.exe的命令,在DOS命令窗口输入这个命令后,输入字符,在敲击回车,就会出现它的unicode编码。

native2ascii.exe运行测试.png

整数型的4种编写方式

对于整数型来说,最常用的是int,开发的时候不用斤斤计较。
在java语言种整数型字面量有4种表示形式:
十进制:最常用的。
二进制:0b开头
八进制:0开头
十六进制:0x开头

public class Int{
  public static void main(String[] args){
    //十进制
    int a = 10;
    System.out.println(a);//输出10
    //八进制
    int b = 010;
    System.out.println(b);//输出8
    //十六进制
    int c = 0x10;
    System.out.println(c);//输出16
    //二进制(JDK8的新特性,低版本不支持)
    int d = 0b10;
    System.out.println(c);//输出2
  }
}

类型转换

在java中有一条非常重要的结论:在任何情况下,整数型的”字面量“默认被当作int类型处理。
如果希望该”整数型字面量“被当作long类型来处理,需要在”字面量“后面添加L或l。建议使用大写的L,因为小写l和1傻傻分不清。
小容量可以自动转换成大容量,这种操作被称为:自动类型转换。
过大的整数可以在后面加一个L,把int类型转换位long类型。
大容量转换成小容量,要想编译通过,必须加强制类型转换符,进行强制类型转换。
需要注意的是:加强制类型转换符之后,虽然编译通过了,但是运行的时候可能会损失精度。
强制类型转换符格式:(强制转换的类型)
例如:
long x = 100L;
int y = (int)x;//这个(int)就是强制类型转换符

long类型强转为int类型会自动将前面的4个字节砍掉。
int类型强转为byte类型会自动将前面的3个字节砍掉。
java中有一个语法规则:当这个整数型字面量没有超出byte或short的取值范围,那么这个整数型的字面量是可以直接赋值给byte或short类型的变量。
这种语法机制是为了方便写代码而存在的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354