嘿~读者们大家好!今天是关于JavaSE部分的数据类型和变量,也是笔者在这里关于这一部分的一个小总结。因为笔者还是菜鸟起飞,所以可能内容不是那么深层次,比较浅,但是笔者会尽力写全。如果对于各位读者们觉得我的内容和排版哪里可以改进可以在下面给我留言。最后,希望能得到大家的点赞,蟹蟹~
(PS:笔者写完之后的感受就是下一次一定要把目录加上,不然这也太长了,感觉翻起来好麻烦)
本章节的学习目标:
<1>字面常量
<2>数据类型
<3>变量
<4>数据类型转换
<5>额外了解:字符串类型
一丶字面常量
铁铁们,顾名思义,何为常量,就是固定不变的量,也就是说,在程序运行期间固定不变的量称之为字面常量。来,放代码
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);
}
}
由图,sout输出之后(注解:因为在IDEA中输sout+Enter可直接变为System.Out.println())的值,全是字面常量。
也就有了以下的分类:
1>字符串常量:括号里面有 " " 的,如: "你好,李焕英" "喂110嘛?我报警" "3.1415926"
2>整形常量:直接写上的数字,如:一定是整数。
3>浮点数常量:直接写上的小数,如:3.14,0.01
4>字符常量:由 ' ' 括起来的,比如: '哎' '呦' '不' '错' '呦'
5>布尔常量: 不是yes就是no,不就 false 就是 true。
6>空常量:NULL(后面说)
二丶数据类型
目前来说数据类型有两种,基本数据类型和引用数据类型(后面讲)。
基本数据类型的分类:
1.分类:整形,浮点型,字符型,布尔型
2.细分:
那么在这里,我想提一下关于字节的概念:
what is the 字节?
字节是计算机中表示空间大小的基本单位,计算机使用二进制表示数据, 我们认为 8 个二进制位(bit) 为一个字节(Byte)。换算:1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB
三丶变量
何为变量?顾名思义,可以改变的量,也就是说,对于经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类变量的。
一般的定义格式是:
数据类型 变量名 = 初始值
那么放在代码里面是怎样实现的呢?如下:
int a = 10;
double d = 3.14;
char c = 'A';
boolean b = true;
重点一 : 就是变量的的值可以重新赋值,并且可以赋值给其他变量:
public class Main {
public static void main(String[] args) {
int x = 10; // 定义int类型变量x,并赋予初始值10
System.out.println(x); // 打印该变量的值,观察是否为10
x = 20; // 重新赋值为20
System.out.println(x); // 打印该变量的值,观察是否为20
int y = x;
System.out.println(y); // 打印该变量的值,观察是否为20
}
重点二 : 就是变量在使用前必须初始化
//错误写法:
int c;
System.Out.println(c);//这里会报错
c = 100;//这里就对了
重点三 :变量赋值不能超过数据类型表示范围
int d = 12345678901234
/*像这种就是编译报错,因为给d赋予的值已经远远超过了其本身的数据范围。
(具体数据范围多少看上面表格)*/
//或者求一下数据范围
System.Out.println(Integer.MIN_VALUE);
System.Out.println(Integer.MAX_VALUE);
重点四:<1>不论什么系统下,byte short int long 都分别占 1 2 4 8个字节。Double占8个字节
<2>float类型数据后面要加F(推荐)或者f(不推荐),不然默认是double
问题:
int a = 1;
int b = 2;
System.out.println(a / b); // 输出 0.5 吗?
不对,输出的是零。
具体原因,我们进入下一部分具体说明。
四丶数据类型转换
上面的问题,为什么输出是0,而不是0.5?
因为a 和 b 都是int类型,int 类型和 int类型相除,也都是int类型,所以0.5只保留整数部分,也就是0,那就是说,如果我们想要结果是0.5,要让小数和小数相除。
代码如下:
double a = 1.0;
double b = 2.0;
System.out.println(a / b); // 输出0.5
那么毋庸置疑,同类型数据相乘或者相除,结果肯定是同类型,那么如果是不同的类型呢?我们该怎么办?重点来了!!
<1>自动类型转换(隐式)
自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数 据范围大的时会自动进行。
代码如下:
float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
也就是说,如果赋值符号右边的数值范围小于符号左边的范围,那么就符合自动类型转换,也就是隐式转换,编译器会自动帮你完成。
这里有一个小问题
这是我在IDEA上截得一个图,这里点出一个问题,a 和 b右边的100和10都是默认int类型,甚至在c = 100 + 10 这行代码中,也没用报错,为什么偏偏最后一行就报错了呢?
这里是因为编译器在检测的时候,如果是一个字面常量,那么编译器只会检测是否超过byte对应的数值范围。如果相加,那就直接相加,然后检测是否超过数值范围。
<2>强制类型转换(显式)
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。
这里用上面的代码做解释,因为d = a + b ,这里的a 和 b是变量,编译器会先检测其数据类型,然后将byte整形提升为int,byte到int小数据范围到大数据范围,很明显不行,所以这里就要用到显式类型转换,做法如下:
操作也很简单,就是给整体前面加一个(byte),其他数据类型操作也一样。
这里有几个要注意的点:
1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查(具体表现看上面)
4. 强制类型转换不一定能成功,不相干的类型不能互相转换(具体分类看上面的数据类型)
上面是两句话,要分开理解,这里,来几段代码说明一下:
这就是我说的意思,铁铁们。
五丶字符串类型
在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表示:将s1和s2进行拼接
}
<1>int -->String类型的转化,三种方法如下:
<2>String --> int 类型的转换
笔者在这里尝试了一下,因为数据类型(下面说的都不包括布尔类)都有对应的包装类,然后这里转换的话其实一个【包装类.valueof(string s)】就可以。
好了,这一节的博客告一段落,奔赴下一课!!搞起!!