【JavaSE】字面常量,数据类型和变量的注意事项

》》》我的博客主页
》》》我的gitee链接
关注我,在学习Java的道路上共同进步!!!

在这里插入图片描述



一. 字面常量

概念:在程序运行期间,固定不变的量就是常量。

比如下面的这段代码:

public class Demo{
	public static void main(String[] args){
		System.Out.println("hello world!");
		System.Out.println(100);
		System.Out.println(3.14);
		System.Out.println('A');
		System.Out.println(true);
		System.Out.println(false);
	}
}

其中,“hello world!”,100,3.14,‘A’,true 和 false都是常量,我们可以称之为字面常量。

1.1. 字面常量的分类

  1. 字符串常量:由双引号" "括起来的都是字符串常量。比如“123”,“hello”,“你好”。
  2. 整型常量:单由数字组成且没有小数点。比如123,100。
  3. 浮点型常量:带有小数点的数或者以科学计数法表示的数。比如3.14,1.23e4(表示的是1.23乘以10的4次方。)
  4. 字符常量:由单引号 ’ ’ 括起来的单个字符。比如’A’, ‘1’ , ‘好’。(Java的字符常量可以表示汉字。)
  5. 布尔常量:有且仅有true 和false。
  6. 空常量:null (小写)

二. 数据类型

在Java中数据类型主要分为两类:基本数据类型和引用数据类型
Alt

2.1. 基本数据类型的分类

基本数据类型有4类8种。
4类:整型,浮点型,字符类型,布尔类型。
8种:byte,short,int,long,float,double,char,boolean。

数据类型关键字内存占用范围
字节类型byte1个字节-128 到 127
短整型short2个字节-32768 到 32767
整型int4个字节-231 到 231 -1
长整型long8个字节-263 到 263 -1
单精度浮点型float4个字节有范围,但一般不关注
双精度浮点型double8个字节有范围,但一般不关注
字符类型char2个字节0 到 65535
布尔类型boolean没有明确规定true 和 false

有关数据类型的注意事项:

  1. 对于Java来说,无论在什么位数的系统下,int 都占用4个字节,long 都占用8个字节。
  2. 整型和浮点型都是有符号的,所以整型和浮点型的最高位都是符号位。具体的存储规则可以参考
    整型数据在内存中的存储原理
    浮点数在内存中的存储原理
  3. 整型默认为 int 型,浮点型默认为 double 型。
  4. 字符串类型属于引用数据类型,不属于基本数据类型。

三. 变量

3.1. 变量概念

变量是一块内存空间,可以存储特定类型的不同字面常量。比如定义一个变量用来存储年龄,而年龄这个变量是可以赋予不同的值的。
不同种类的数据类型可以定义出不同种类的变量。比如定义一个int 类型的变量,这个变量的名字是age,那么这个age变量可以存储整型常量,但整型常量可以不同,比如18,30。

3.2. 语法格式

定义变量的语法格式:

数据类型 变量名 = 初始值;

注意:

  1. 变量的性质 (值的类型,值的精度和范围,可支持的操作等) 由数据类型决定。
  2. 最开始给变量放置的值就是初始值。
  3. Java当中,定义变量时,可以没有初始值,但局部变量在使用的时候,必须初始化,不知道该初始化为什么值就初始化为0。
    Alt
    Alt
    Alt

3.3. 整型变量

整型可以分为byte,short,int,long,那么整型变量也可以分为 byte 型变量,short 型变量,int 型变量和 long 型变量。

3.3.1. int型变量

// int型变量所能表示的范围:
System.Out.println(Integer.MIN_VALUE);//-2147483648
System.Out.println(Integer.MAX_VALUE);//2147483647

// 注意:在定义int型变量时,所赋予的值不能超过int的范围
int d = 2147483648; // 编译时报错,初值超过了int的范围

Java当中,当你赋值的字面值常量一旦超过了变量能存储的最大值,会自动编译报错。就像上面代码中变量d存储的是 2147483648, 2147483648大于 int 变量能够存储的最大值2147483647。
但是但是,如果你赋值的不是字面值常量,而是表达式时,比如:

int a = 2147483647 +1;//此时不会报错,但输出a的结果是-2147483648

输出a的结果为什么是-2147483648呢,可以参考
整型数据在内存中的存储原理中的 2.3. 整数类型存储的取值范围

int型变量的注意事项:

  1. int 无论在那种系统下都占 4 个字节。
  2. 在给 int 变量设置初始值时,不能超过 int 能表示的范围,否则会导致溢出。(当然不止针对 int 类型的变量)
  3. int 的包装类型为 Integer(只有基本数据类型才有包装类型)

3.3.2. long型变量

int a = 10;//定义一个整型变量a做对照
long b = 10L; // 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l
long c = 10l; // 一般更建议后面加大写L,因为小写l与1不好区分

// long型变量所能表示的范围:
System.out.println(Long.MIN_VALUE);//-9223372036854775808
System.out.println(Long.MAX_VALUE);//9223372036854775807

long型变量的注意事项:

  1. long 型变量的初始值后面加 l 或者 L ,小写的 l 容易与一混淆,所以建议加 L
  2. long 无论在那种系统下都占 8 个字节。
  3. long 型变量存储的范围是 -263 到 263 -1,也就是 -9223372036854775808 到9223372036854775807。
  4. long的包装类型是Long (包装类型首字母都是大写)

3.3.3. short型变量

short d = 10;

// short型变量所能表示的范围:
System.out.println(Short.MIN_VALUE);//-32768
System.out.println(Short.MAX_VALUE);//32767

short型变量的注意事项:

  1. short 无论在那种系统下都占 2 个字节。
  2. short 型变量存储的范围是 -215 到 215 -1,也就是 -32768 到 32767
  3. short 的包装类型是 Short

3.3.4. byte型变量

byte e = 10;

// byte型变量所能表示的范围:
System.out.println(Byte.MIN_VALUE);//-128
System.out.println(Byte.MAX_VALUE);//127

byte型变量的注意事项:

  1. byte 无论在那种系统下都占1个字节。
  2. byte 型变量存储的范围是 -27 到 27 -1,也就是 -128 到 127
  3. byte 的包装类型是 Byte

3.4. 浮点型变量

3.4.1. double型变量

double f = 1.1;

//此时f中存的是1.1,f乘以f理应是1.21
System.out.println(f * f);//输出的结果是1.2100000000000002

double型变量的注意事项:

  1. double 无论在那种系统下都占8个字节。
  2. double 的包装类型是 Double
  3. double 类型的内存布局遵守 IEEE 754 标准, 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值
    浮点数的存储方法可以参考浮点数在内存中的存储原理

3.4.2. float型变量

//为了区分float和double类型,建议:float类型变量的初始值之后加f或者F
float g = 1.1f;

float型变量的注意事项:

  1. float 无论在那种系统下都占4个字节。
  2. float 的包装类型是 Float
  3. float 类型的内存布局同样遵守 IEEE 754 标准,double 类型相比于 float 类型,能表示更精确的小数。
  4. 定义 float 型变量的初始值要加 f 或 F, 没有加 F 的初始值默认是 double 类型,占 8 个字节,加了 F 之后是 float 类型, 占 4 个字节。

3.5. 字符型变量

char c1 = 'A'; // 大写字母
char c2 = 'a'; // 小写字母
char c3 = '1'; // 数字字符

//java中可以存放汉字
char c3 = '酷';

字符变量的注意事项:

  1. 字符字面值用单引号加一个字符表示。
  2. Java 中使用 Unicode 表示字符,一个字符占用 2 个字节, 可以表示世界上的各种字符,包括中文。
    Unicode包含ASCII码
  3. 字符实际上是以整数的形式存储,所以字符型的本质是整型。尽管字符本质上是整型,但它们通常在输出或显示时以字符的形式呈现,而不是作为对应的整数值。
  4. char 的包装类型为 Character

3.6. 布尔型变量

boolean flg1 = true;
boolean flg2 = false;

boolean flg = true;
System.out.println(flg + 1);//error

布尔型变量的注意事项:

  1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.
  2. Java 的 boolean 类型和 int 不能相互转换, 不存在 非0 表示 true, 0 表示 false 这样的用法。
  3. . Java 虚拟机规范中,并没有明确规定 boolean 占几个字节,也没有专门用来处理 boolean 的字节码指令,在Oracle公司的虚拟机实现中,boolean 占1个字节。
  4. boolean 的包装类型为 Boolean

3.7. 类型转换

在Java中,当参与运算的数据类型不一致时,就会进行类型转换。
Java中类型转换主要分为两类:

  1. 自动类型转换
  2. 强制类型转换

3.7.1. 自动类型转换(隐式转换)

自动,即代码编译的时候,编译器自动会帮你进行类型转换。

自动类型转换的特点:数值范围小的类型转换为数值范围大的类型

例子:

int a = 100;
long b = 10L;
b = a;//自动类型转换,int --> long, 
//a和b都是整型,a的范围小,b的范围大,
//当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值 

float f = 3.14F;
double d = 5.12;
d = f; // 自动类型转换,float --> double ,
//编译器会将f转换为double类型,然后进行赋值

自动类型转换的注意事项:

  1. 不同数据类型的变量之间赋值,表示范围较小的数据类型会自动转换为表示范围较大的数据类型。
  2. 整数常量默认被解析为int类型,浮点数常量默认被解析为double类型。

3.7.2. 强制类型转换(显式转换)

强制,即人为干涉,必须手动加上强制转换的类型,否则代码编译失败或者有数据丢失。

强制类型转换的特点:数值范围大的类型转换为数值范围小的类型

例子:

int a = 10;
long b = 100L;
a = (int)b; // 强制类型转换,long-->int, 
//数据范围由大到小,需要在b的左边手动补上(int)表示变量b强制转换为int类型。
//没有加(int)会编译失败

float f = 3.14F;
double d = 5.12;
f = (float)d; //强制类型转换, double-->float, 
//数据范围由大到小,需要强制类型转换,否则编译失败
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; // 编译失败:类型不兼容

强制转换类型的注意事项:

  1. 如果需要把范围大的类型赋值给范围小的类型, 就需要强制类型转换, 但是精度可能会丢失。
  2. 强制类型转换不一定成功,不相干的类型不能强制类型转换(比如boolean不能强转为int类型),建议非必要不强转。

3.8. 类型提升

不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的
整型提升的两个规则:

  1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
  2. 对于 short, byte, char 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算
  1. int 类型与 long 类型的运算 (float 与 double 类型的运算相同的道理)
int a = 10;
long b = 20;

//下面两行代码中的变量a都进行了类型提升,int-->long
long c1 = a + b;//更推荐这种写法
int c2 = (int)(a + b);
  1. byte 与 byte 类型的运算
byte a = 1;
byte b = 2;
byte c = a + b;//error,此时 a + b的结果已经是int类型,
//而c是byte类型,类型不符。
int d = a + b;//OK


char d = 'A';//字符A的Unicode码是65
int e = 1;
int f = d + e;//d先类型提升为int类型再进行计算

四. 字符串类型

字符串类型为 String, String 是引用数据类型,所以 String 没有包装类型,只有基本数据类型才有包装类型。

String str = "Hello";
int len = str.length();//字符串求长度
System.out.println(len);//5

String str2 = "34567";
int num1 = Integer.valueOf(str2);//字符串转成整数
System.out.println(num1 + 1);//34568

int num2 = 34567;
String str3 = String.valueOf(num2);//整数转成字符串
System.out.println(str3 + 1);//345671

字符串 + 其他类型

字符串 + 其他类型 中的加号意思是拼接。字符串拼接其他类型,结果打印的整体也是字符串。
如果是 a+b+‘‘a+b’’ 的形式,左边的 a+b 先相加,再与 “a + b” 拼接。

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("a=" + a + "b=" + b);//a=10b=20
        System.out.println(a + b);//30
        System.out.println("a + b = " + a + b);//a + b = 1020
        System.out.println(a + b + "a + b");//30a + b
    }

输出结果:
Alt

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值