数据类型与变量


一、字面常量

程序运行期间,固定不变的量称为常量
常量的分类:

  • 字符串常量:有"“括起来的,比如"12345”、“hello”、“你好”。
  • 整形常量:比如100、1000(没有小数点)。
  • 浮点数常量:比如3.14、0.49。
  • 字符常量:由’ '括起来的单个字符,比如:‘A’、‘1’。
  • 布尔常量:只有true和false。
  • 空常量:null。

二、数据类型

在Java中数据类型主要分为两类:基本数据类型和引用数据类型。
注意: 在Java中,所有数值类型的数据都只有带符号的,没有无符号类型。
基本数据类型有四类八种:
四类:整型、浮点型、字符型、布尔型。
八种:

数据类型关键字内存占用范围
字节型byte1字节-128~127
短整型short2字节-32768~32767
整型int4字节 − 2 31 -2^{31} 231~ 2 31 − 1 2^{31}-1 2311
长整型long8字节 − 2 63 -2^{63} 263~ 2 63 − 1 2^{63}-1 2631
单精度浮点数float4字节
双精度浮点数double8字节
字符型char2字节0~65535
布尔型boolean没有明确规定true和false
注意
  • 整型和浮点型都是带符号的;
  • 整型默认为int,浮点型默认为double;
  • 字符串属于引用类型;
  • 引用类型包括类、接口和数组类型以及特殊的null类型。

三、变量

1.变量概念

在Java程序中,其值可以发生改变的量称为变量。数据类型就是用来定义不同种类变量的。

2.语法格式

代码如下(示例):

int a =10;//定义整型变量a,a是变量名也称为标识符,该变量中放置的值为10
double d=3.14;

3.整型变量

3.1整型变量

//方式1,在定义时给出初值
int a=10;
//方式2,定义时没有给出初值,使用前必须设置初值,否则会报错
int b;
b=10;
System.out.println(b);

注意

  • int不论在任何系统下都是4个字节;
  • 没有合适的初始值,可以设置为0;
  • 给变量设置初值时,不能超过int的表示范围,否则会导致溢出;

3.2长整型变量

int a=10;
long b=10L;//区分int和long,在初值后加L或者l

3.3短整型变量

short a=10;
System.out.println(a);

3.4字节型变量

byte a=10;
System.out.println(a);

4.浮点型变量

4.1 双精度浮点型

double d=3.14;
System.out.println(d);

注意:

  • double在任何系统下都占8个字节;
  • 浮点数是个近似值,并不是精确值;

4.2 单精度浮点型

由于表示的数据精度范围较小,一般在工程上用到浮点数都优先考虑double,不太推荐float。

5.字符型变量

char c1='A';//大写字母
char c2='1';//数字字符
System.out.println(c1);
System.out.println(c2);

注意:

  • Java中使用’单个字母’的形式表示字符字面值
  • 计算机中的字符本质上是一个整数。在C语言中使用ASCII表示字符,而Java中使用Unicode表示字符。因此一个字符两个字节

6.布尔型变量

注意:

  • 布尔型变量只有两种取值,true表示真,false表示假;
  • Java中的布尔型和整型不能相互转换;不存在1表示true,0表示false;

7.类型转换

Java作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有较严格的校验。

int a=10;
long b=100L;
b=a;//可以通过编译
a=b;//编译失败

在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式)和强制类型转换(显式)。

7.1 自动类型转换(隐式)

代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
特点:数据范围小的转为数据范围大的时会自动进行。

System.out.println(1024);//整型默认情况下是int
System.out.println(3.14);//浮点型默认情况下是double

int a=100;
long b=10L;
b=a;//a的范围小,b的范围大,将a的值赋给b时,编译器会自动将a提升为long类型,然后赋值
a=b;//编译报错,long的范围比int大,会有数据丢失

float f=3.14F;
double d=5.12;

d=f;//编译器会将f转换为double类型,然后进行赋值
f=d;//double表示的数据范围大,会有数据丢失

byte b1=100;//编译通过,编译器将100转换为byte
byte b2=257;//编译失败,257超过了byte的数据范围,有数据丢失

7.2 强制类型转换(显式)

当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的。

int a=10;
long b=100L;
b=a;//数据范围从小到大,隐式转换
a=(int)b;//数据范围从大到小,需要强转,否则编译失败

float f=3.14F;
double d=5.12;
d=f;//数据范围从小到大,隐式转换
f=(float)d;//数据范围从大到小,需要强转,否则编译失败

a=d;//报错,类型不兼容
a=(int)d;//double没有int表示的数据范围大,需要强转,小数点之后全部丢弃

byte b1=100;//100默认为int,没有超过byte范围,隐式转换
byte b2=(byte)257;//257默认为int,超过byte范围,需要强转,否则编译失败

boolean flag=true;
a=flag;//编译失败:类型不兼容
flag=a;//编译失败:类型不兼容

注意:

  • 不同数据类型的变量之间赋值,范围小的类型能够隐式转换成范围较大的类型;
  • 如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能精度丢失
  • 将一个字面常量进行赋值时,Java会自动针对数字范围进行检查;
  • 强制类型转换不一定能成功,不相干的类型不能互相转换;

8.类型提升

不同数据类型的数据之间互相运算时,数据类型小的会被提升到数据类型大的。

  • int与long之间,int会被提升为long
int a=10;
long b=20;
int c=a+b;//编译出错,int+long-->long+long 赋值给int时会丢失数据
long d=a+b;//编译成功,int+long-->long+long 赋值给long
  • byte与byte的运算
byte a=10;
byte b=20;
byte c=a+b;
System.out.println(c);//编译失败:java: 不兼容的类型: 从int转换到byte可能会有损失

结论: byte和byte都是相同类型,但是出现编译报错。原因是虽然a和b都是byte,但是计算a+b会先将a和b都提升为int,再进行计算,得到的结果也是int,然后赋给c,就会报错。
由于计算机的CPU通常是按照4个字节为单位从内存读写数据,为了硬件上实现方便,像byte和short这种低于4个字节的类型会先提升成int,再参与计算。
上述代码正确的写法;

byte a=10;
byte b=20;
byte c=(byte)(a+b);
System.out.println(c);

小结:

  • 不同数据类型混合运算,范围小的会提升成范围大的;
  • 对于short、byte这种比4个字节小的类型,会先提升成4个字节的int,再运算。

四、字符串类型

在Java中使用String类定义字符串类型,比如:

public static void main(String[] args){
String s1="hello";
String s2=" world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2);//表示将s1和s2进行拼接

在有些情况下,需要将字符串和整型数据之间进行转换;

  • int转成String
int num=10;
String str1=num+"";//方法1
String str2= String.valueOf(num);//方法2
  • String转成int
String str="100";
int num=Integer.parseInt(str);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值