目录
1、前言
- 从本次博客开始,博主开始更新Java相关技术,由于也是最近才接触学习,希望各位大佬多多指教,如果文章对您有帮助的话,麻烦帮忙点点赞,万分感谢!
- 本次blog会详细讲解Java的数据类型与变量的相关知识。
2、字面常量
其实最简单的"HelloWorld",就是字面常量,如下代码:
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);
}
}
- 其中:100、3.14、‘A’、true/false都是常量,将其称为字面常量。
- 字面常量的分类:
- 字符串常量:由" "括起来的,比如“12345”、“hello”。
- 整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000
- 浮点数常量:程序中直接写的小数,比如:3.14、0.49
- 字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’
- 布尔常量:只有两种true和false
- 空常量:NULL
注意:字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型。
3、数据类型
在Java中数据类型主要分为两类:基本数据类型和引用数据类型。
基本数据类型有四类八种:
- 四类是指:整型、浮点型、字符型以及布尔型
- 八种:分别是:
- 整型:字节型、短整型、整型、长整型
- 浮点型:单精度浮点数、双精度浮点数
- 字符型
- 布尔型
- 下图为了方便大家记忆,给出了内存中所占用的字节数和取值范围,详细的讲解在第4点变量中:
注意:
- 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节。
- 所有类型默认都是有符号的,Java中没有无符号一说。
- Java在存储数据的时候,整型默认为int型,浮点型默认为double。
- 字符串类型(String)属于引用类型。
4、变量
4.1 什么是变量
- 就相当于是一个小箱子,箱子的大小就是你的类型决定的,箱子就是你的变量名。
- 在Java中没有无符号型,所以存储都是有符号型,第1位是符号位,剩下的31位(或其他位)作为数据位。
4.2 整型变量
4.2.1整型变量(int型,4个字节)
- 代码如下:
// 方式一:在定义时给出初始值 int a = 10; System.Out.println(a); // 方式二:在定义时没有给初始值,但使用前必须设置初值 int b; b = 10; System.Out.println(b); // 使用方式二定义后,在使用前如果没有赋值,则编译期间会报错 int c; System.Out.println(c); c = 100; // int型变量所能表示的范围: System.Out.println(Integer.MIN_VALUE); System.Out.println(Integer.MAX_VALUE); // 注意:在定义int性变量时,所赋值不能超过int的范围 int d = 12345678901234; // 编译时报错,初值超过了int的范围
需要注意:
-
建议定义整型变量的时候,直接赋值初值,如果不知道初值是什么,可以赋值为0,如果没有初值的话,编译器会报错。
-
int不论在何种系统下都是4个字节。
-
在给变量设置初始值时,值不能超过int的取值范围,否则会导致溢出,程序编译出错。
-
int的包装类型为 Integer(比较特殊,与char类型单独记一下)。
4.2.2 长整型变量(long型,8个字节)
- 代码如下:
int a = 10;
long b = 10; // long定义的长整型变量
long c = 10L; // 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l
long d = 10l; // 一般更加以加大写L,因为小写l与1不好区分
// long型变量所能表示的范围:这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用.
System.Out.println(Long.MIN_VALUE);
System.Out.println(Long.MAX_VALUE);
注意:
- 长整型变量的初始值后加L或者l,推荐加L,因为l与1很像,难以区分。
- 长整型不论在那个系统下都占8个字节。
- long的包装类型为Long(首字母大写即可)。
4.2.3 短整型变量(short,2个字节)
short a = 10;
System.Out.println(a);
// short型变量所能表示的范围:
System.Out.println(Short.MIN_VALUE);
System.Out.println(Short.MAX_VALUE);
注意:
- short在任何系统下都占2个字节。
- short的取值范围为:-32768 ~ 32767,注意使用的时候不要超过取值范围,否则会报错。
- short的包装类型为Short。
4.2.3 字节型变量(byte,1个字节)
- 代码如下:
byte b = 10;
System.Out.println(b);
// byte型变量所能表示的范围:
System.Out.println(Byte.MIN_VALUE);
System.Out.println(Byte.MAX_VALUE);
注意:
- byte在任何系统下都占1个字节。
- byte的取值范围是:-128 ~ 127(单独记一下,以后用到的地方很多)。
- 字节的包装类型为Byte。
- 神奇的代码,接下来我们看一个神奇的代码:
byte a = 127;
byte b = a+1;
- 这个代码当然有问题,但是问题出在哪里呢?是a+1的值超出byte的最大取值范围吗?
- 答案是否定的,其实编译器并不知道(a+1)的取值是多少,只有在运行的时候,才会知道他的取值,所以一开始是检测不出来越界的,那么问题出在哪里呢?
- 其实上面也有提到,在整型变量进行计算的时候,所有小于4个字节的数据,都会提升为4个字节(int型),再去参与计算,也就是我们说的整形提升。
- 所以这个代码最本质的问题是,a+1返回的是int类型,用byte类型接收,会发生精度丢失的情况,这才是本质问题!
- 如果实在想用byte来接收,就要进行强制类型转换,代码如下:
byte a = 127;
byte b = (byte)a+1;
- 强制类型转换成byte类型之后,就按byte的类型规则,相当于127+1转过来了,如下图所示,结果为-128。
- 强制类型转换,一定会让程序员自己确认,要不程序就会报错。
4.3 浮点型变量
4.3.1 双精度浮点型(double,8个字节)
double d = 3.14;
System.Out.println(d);
注意:
- double在任何系统下都占8个字节。
- double和float这种浮点数,就算的都是近似值。
- double和float的浮点数与整数在内存中的存储方式不同,不能单纯使用的形式来计算。
- double的包装类型为Double
- 一个神奇的代码
int a = 1;
int b = 2;
System.out.println(a / b);
- 这个输出会是0.5嘛?答案是否定的,两个整型相除,结果一定是整型,结果为0。
- 如果想要结果是小数,那么a,b中至少有一个类型要是浮点型,即可得出0.5,改进的代码如下:
double a = 1.0;
double b = 2.0;
System.out.println(a / b); // 输出0.5
4.3.2 单精度浮点型(float,4个字节)
float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num);
- float类型必须在数据后面+小写或大写的f。
- 如下代码,java默认浮点型是double类型的(8个字节的,你用4个字节float接收就会出错)
float num = 1.0;//默认为double类型,编译错误
System.out.println(num);
4.4 字符型变量(char,2个字节)
char c1 = 'A'; // 大写字母
char c2 = '1'; // 数字字符
System.out.println(c1);
System.out.println(c2);
// 注意:java中的字符可以存放整形
char c3 = '帅';
System.out.println(c3);
注意:
- 不是整数类型,因为采用的是Unicode不是ASCII,所以占两个字节,可以赋值为中文。
- 不能赋值负数,如果赋值为整数,输出的是整数对应的字符。
- java用的是Unicode字符集,比ASCII(255截止)码字符集表示的范围更大。所以java中的char可以写中文。
- char的包装类特殊:为character,较为特殊。
4.5 布尔型变量(boolean)
boolean b = true;
System.out.println(b);
b = false;
System.out.println(b);
注意:
- boolean类型,true表示真,false表示假,不存在 1 表示 true, 0 表示 false 这样的用法。
- Java 的 boolean 类型和 int 不能相互转换。
- 如下代码,不能写成boolean(value + 1);这种形式,因为1是整型,不能与boolean类型相加。
boolean value = true;
System.out.println(value + 1);
// 代码编译会出现如下错误
Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误
System.out.println(value + 1);
第一个类型: boolean
第二个类型: int
1 个错误
5、字符串类型(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表示:将s1和s2进行拼接
}
- int类型转成String类型代码:
int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);
- String类型转成int类型代码:
String str = "100";
int num = Integer.parseInt(str);
- 因为String是引用数据类型,我们在这里不过多介绍,之后的blog会详细介绍这部分内容,大家可以持续关注博主呦!
6、结语
本次的blog详细介绍了java的常见类型与变量,初步了解了四类八种的数据类型,接下来会持续更新java相关blog,欢迎大家来关注点赞!