Java数据类型及转换

1.数据类型

    1.1什么是数据类型

百度百科:数据类型数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。

1. 简单理解:  Java对数据进行了分类,存在不同的类型

2. 为什么需要数据分类:不同的数据类型占用的存储空间不一样,为了更好的利用计算机内存空间

在Java 的领域里,

1. 基本数据类型变量:  存的是数据值本身,

2. 引用数据类型变量:  存的是保存数据的内存空间地址。

学习数据类型基本认识:

1. Java中每个变量都有一种类型,类型限制了变量可以存放那些值的类型

示例:比如整数浮点数

2. 引用数据类型类(class ):一个类就是一个数据类型

计算机存储数据:存储在硬盘【磁盘】,硬盘中的方式都是用的二进制数据的方式进行存储

01010101010101010101010101010101

    1.2基本数据类型(8种)

1.计算机中的存储单位

1024T

1T = 1024G

1G = 1024MB

1M = 1024KB

1KB=1024Byte

1Byte = 8 bit【1个bit就是一个二进制位】

2. 整型数据byte  short  int   long


1)为什么会有不同大小的类型,举个例子比如存5 这个数据怎么存的?

byte(8位,范围是-128到127)

short(16位)

int(32位)

long (64位)

2) 上面的byte short int long 最大长度可以通过jdk文档去找到 具体的范围。

3)如果值比long还大,怎么办?

Java提供了一个类:BigInteger:用于处理较大整数:目前知道就好不必深究

4) long赋值时,因为整数默认是int类型,要转换为long类型的值,后面加上l或L

5) 同一个整数可以使用不同的进制表示:(System.out.println(0b101)需jdk1.7才能按照十进制输出)

6) Java7 开始 支持数字之间用 _ 分割(12_34_56输出123456)

1. 浮点型float    double  其实就是小数


A.float(单精度32位)

直接给变量赋值时必须在浮点类型数据后面加上f 或F

[表示该数据是一个浮点类型数据]

B. double( 双精度64位)

单精度双精度区别:

1. 对于单精度浮点数,运行速度相比double更快,占内存更小,

2. 但是当数值非常大或者非常小的时候会变得不精确。

3.2.双精度比单精度表示的位数大精确的位数多,简单地说, float表示的小数点位数少。

默认浮点数的类型是double

表现形式:

常规3.14  3.14f

科学计数法

例如3.14e2  3.14*10^2     3.14e-2

注意:表的时候会有精度损失 [ 使用浮点数的时候需要注意 ]

      例如double num= 1.0, 是一个无限接近1.0的一个值

示例Java代码:1.3*1.4

 结论:浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用float 和 double 作精确运 算的时候要特别小心。

那怎么更精确的表示浮点数呢

    Java提供了一个类BigDecimal来表示更精准的浮点数:目前知道就好不必深究

1. 字符char   [了解]

1. 什么是字符:单引号引起来的一个符号就是字符数据例如:’A’

2. 存储单位16 位[0-65535]  [2个字节,16位]。字符常量使用单引号 ‘’包裹起来。

3. 表现形式:

1) ‘A’最常用,最直观的方式

2)  使用一个数字表示,对应有一个ASCII码表[ 字符编码 ]

      例如:char c = 65;//表示‘A’ 这个字符

3)16进制表现形式

  ‘A’-》65(10进制)

     'A'  -》0x41(16进制)怎么表示? 

4) 特殊符号(需要使用转义符号转义)

     \’   \”   \\   \r(回车)  \n(换行) \t(制表符Tab)

4. 字符数据可以当成一个整数来使用,

5.什么是asscii表,就像化学元素周

4)布尔类型boolean

 值只有两个true false,不能使用 0 1表示

    1.3引用类型

1.引用类型String

1)String是 java中已经设计好的一个类,表示的值是字符串,是字符串数据类型

[注意:Java中设计的类和我们自己设计的类的性质是一样的]

2) 常见形式:String s = “你好”;

3) 当String 和 + 一起使用的时候,这时候+ 是拼接字符串的功能

System.out.println(“你好”+2);//结果为    你好2

int a  = 5;

int b = 10

System.out.println(“a=”+a+”,b=”+b); //结果为a=5,b=10

2.一个类其实就是一种引用数据类型

1) 自己写的一个类也是一种数据类型,类型为类名

2) 误区:很多人一开始觉得Java中提供的类才是一种类型,而我们自己写觉得不是!

3) 我们自己写的类和Java已经写好的,性质一样:面向对象会详细讲解这块内容



2.数据转换

1. 基本数据和引用类型数据的区别

1.基本数据类型变量:  存的是值的本身

2.引用类型数据变量:  存的是对值的引用[ 地址值 ]

    2.1自动转换

数据类型过长和溢出

byte b = 128;//超出byte范围

long intMax = int最大数(查jdk文档)

long  float  double只要两个操作数中有一个是上面类型的,另一个就会被转换成相应类型,并且结果也是该类型: 例如

int  num = 10;

double b = 10.01;

double  c = num + b;

System.out.println(c);


如果2个操作数(包括byte,short,char,int),都将会转换为int类型,并且结果也是int(自动向上转型)



short s = 10;

int num = 20;

int n = num + s;

System.out.println(n);


byte b=3;     

b=(byte)(b*3);//必须声明byte。

System.out.println(b);


char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换

例如:

char  c = 'A';

int num = 10;

int a = c+num;

System.out.println(a);                           

需要注意的是:

1.char型具有两个字节,其数值范围是0 ~ 2^16-1,

2.short类型也具有两个字节,其值的范围是-2^15 ~ 2^15-1

这直接导致byte型不能自动类型提升到char,char和short直接也不会发生自动类型提升(因为值范围问题),同时,byte当然可以直接提升到short型。

所以,char 不能和byte short 相互自动转换

特例 :只看类型不看值

示例1:

int a = 129;

byte b = (byte)a;//编译器只看容器不看值

System.out.println(b);//结果为-127

示例2:

byte  b  =  100;//可以自动转换

float   f = 1.3;//不能自动转换

int  a = 2147483647;

a = a+1;

System.out.println(a);  // 结果为  -2147483648

2.2强制转换

1.强制类型转换的语法

数据类型变量名= (数据类型)值;//值可能是更高的类型

2. 强制类型转换的注意事项

(1) 高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降.

(2)实际开发中:应该要知道被强制转换的数据,是在一个已知的范围;

3.示例

比如说:double 转 float  

示例一

int i1=123;

int i2=456;

float f1 = (float) ((i1+i2)*1.2);//容量大的类型转换为容量小的类型时,要加上强制转换符

示例二:

short i=99;

char c=(char)i;  

System.out.println(c);  

 

示例三:

byte b1=1;

byte b2=2;

byte b3=(byte)(b1+b2); //byte,short,char在计算时首先转换为int,大容//量(int)转换为小容量的类型(byte)时要加强制转换


特例:

byte t = 127;//不报错

int a = 127;

//需要强制转换才不报错:编译器只看容器【只看类型】不看值

byte b = (byte)a;System.out.println(b); // 结果为 127

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

推荐阅读更多精彩内容