大家好,我是路不停_。
今天分享的是Java基础中的数据类型与变量,我也还在持续学习中,希望对在看的小伙伴们也有所帮助!
希望大家一起不断成长。
Java中的数据类型分为两种:基本数据类型和引用数据类型。
基本数据类型有8种!
布尔类型、字符类型、字节类型、短整型、整数、长整型、双精度浮点型、单精度浮点型
一些注意点
- 在任意系统上,int都是四个字节,long都是8个字节
- 整型和浮点型都是有符号的
- 整型默认是int型,浮点型默认为double
引用这个词,如果对于学习C++的同学,并不陌生,引用即是别名,其实本质就是一种指针的表现。
在Java中引用数据类型与c++中的指针类似。
可以看一下下面的代码:
public static void main(String[] args) {
String a = "Hello World!";
String b = a;
a = "Hello Java";
String c = a;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
这段代码经历了两个阶段:
第一阶段,创建出a和b变量,a和b变量并不是保留了Hello World!这串字符串,而是以一种方式可以找到位于栈空间的这串字符串。就像指针一样。
第二个阶段,a改变了指向,c和a将指向一个空间,但是b仍然保留。
对于引用类型,我们现今作简单的了解,后续会加深对其的解释和理解的~~~
常量:在程序中保持不变的量我们称之为常量,强制性更改常量是会报错的。
在Java中,常量又分为两种,一种是字面常量,另一种是标识符常量
字母常量:直接以数字或者字符串的形式或是字符等等给出的,就称之为字母常量
例如:
标识符常量是通过关键字final
定义的。它的使用和变量一样,必须要先声明后使用。
标识符常量也称符号常量~
举个例子:
此处我们只写main函数
public static void main(String[] args) {
final int A = 10;
// a = 12;报错
}
Java中约定常量标识符一般使用大写字母。和变量进行区分。
使用常量的优点:
这一点感觉和c语言中define很像
变量的基本属性:变量名,数据类型,存储单元,变量值。
变量名是我们自己起的名字
存储单元是在内存中的分布,有栈堆静态区等等存储
变量值是我们自动赋值的值
变量定义的语法:
数据类型 变量名 = 初始值
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符。我们起的类名,方法名或者变量名都叫标识符
【标识符规则】:
【起名建议】:
int类型占4字节
对于变量的使用:
public static void main(String[] args) {
int a = 10;
int b;
b = 10;
}
注意事项:
long类型占8个字节
对于long类型,推荐初始化后面加L或者l
public static void main(String[] args) {
int a = 10;
long b = 10L;
System.out.println(Long.MAX_VALUE);//查看Long表示的最大整数范围
System.out.println(Long.MIN_VALUE);//这个是最小
}
注意事项:
short类型占2个字节
public static void main(String[] args) {
short a = 10;
System.out.println(a);
System.out.println(Short.MAX_VALUE);
System.out.println(Short.MIN_VALUE);
}
注意事项:
byte类型占1个字节
public static void main(String[] args) {
byte b = 10;
System.out.println(b);
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
}
注意事项:
注意事项:
public static void main(String[] args) {
double d = 1.22;
System.out.println(d);
double num = 1.1;
System.out.println(num * num);
}
float类型在定义的时候最好加上F,或者f,用来和double类型作区分
public static void main(String[] args) {
float num = 1.12f;
System.out.println(num);
}
字符类型占用2字节
public static void main(String[] args) {
char a = 'A';
char b = '9';
char s = '好';
System.out.println(a);
System.out.println(b);
System.out.println(s);
}
注意事项:
布尔类型占用1个字节(这句话并不普遍适用====>java虚拟机规范中没有规定boolean占用多少字节,但是在Oracle公司的虚拟机实现中,boolean占用1个字节)
public static void main(String[] args) {
boolean value = true;
System.out.println(value);
}
注意事项:
类型转换是当不同类型变量相互赋值的时候,发生的操作。
java在类型检查这方便十分严格,不同类型相互赋值有时候是不可行的。
当类型不同时,就会发生类型转换了。
自动类型转换(隐式)
编译器自行处理的类型转换。直接将数据范围小的转换为数据范围大的。
例如上面的例子:a是整型变量,b是长整型,a赋值给b的时候会自动提升为long类型,然后赋值过去。但是龙类型比int类型范围大,赋值的时候会有数据丢失不安全,所以编译器报错了。
再看几个例子:
public static void main(String[] args) {
float f = 123.12f;
double d = 123.1212;
d = f;
// f = d;报错,double类型比float范围大,会丢失数据,不安全
byte b = 100;
// byte b2 = 128;报错,byte类型是-128~127,128超过其表示范围,会丢失数据
}
强制类型转换(显示)
强制类型转换是人为手动强转类型的。这种情况下我们就可以完成从范围大的数据赋值给范围小的数据了。
public static void main(String[] args) {
float f = 123.12f;
double d = 123.1212;
f = (float)d;
byte b = 100;
byte b2 = (byte)128;
System.out.println(f);
System.out.println(b2);
}
注意事项:
不同数据之间进行相互运算的时候,数据类型小的会提升到数据类型大的。
比如int和long之间运算结果提升成long
此时想要用一个int类型来装载运算结果是不行的,因为结果已经提升为long了。
一般进行整型运算的时候,如果类型比int小,那么结果会转成int。如果类型中有long或是double类型的,结果就是long或double
如下是short转成了int。
如下是int转成了double。
扩展:字符串类型
Java中引入了String类型表示字符串
有时候我们需要将字符串和int类型进行转换
- int转String
public static void main(String[] args) { int num = 100; String str = num + ""; String str2 = String.valueOf(num); System.out.println(str); System.out.println(str2); }
- String转int
public static void main(String[] args) { String str = "100"; int num = Integer.parseInt(str); System.out.println(str); }