变量是存在内存里面的
输入设备比如键盘,输出设备比如屏幕
外存储器相当于磁盘,u盘之类的
那么内存储器 也就是内存 也叫做 RAM 这个是变量存储的地方,也就是运行程序用的
整型变量和c语言不一样,int在哪也就四个字节。
局部变量在未进行初始化的时候是不可以使用的。
int的取值范围首先康康单位之间的关系
4个字节为32个比特位,而第一位是符号位,所以取值范围为-2^31 — 2^31-1(去掉0)
也可以用一个圆来表示,更加直观
最大值最小值Integer.MAX_VALUE
Integer.MIN_VALUE
public class HelloWorld{
public static void main(String[] args) {
//int类型就4个字节
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println("HelloWord");
System.out.println(max);
System.out.println(min);
}
}
运行结果为
给MAX_VALUE+1会变成最小值
给MIN_VALUE-1会变成最大值
长整型变量public static void main1(String[] args) {
long a = 10L;
System.out.println("a = " + a);
System.out.println("max=" +Long.MAX_VALUE);//拼接
System.out.println("min=" +Long.MIN_VALUE);
int b = 3;
int c = 4;
System.out.println(b+c);
//注意:任何类型的数据和字符串进行拼接 结果就是字符串
//可以加括号(b+c)
System.out.println("hhh"+b+c);
赋值的时候值的后面要加上L;包装类是Long
双精度浮点型和c语言一样,包装类是Double
单精度浮点型赋值的时候后面要加 f ,值得注意的是double不可赋值给float 这点也体现了Java的安全性。
字符类型变量也一样
包装类型是Character
public class HelloWorld {
public static void main(String[] args) {
char a = 'a';
char b = '高';
char c = 97;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
字节类型
1个字节范围在-127 - 128之间
public class HelloWorld {
public static void main(String[] args) {
byte a = 12;
byte c = 21;
System.out.println(a+" "+c);
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE+1);
}
}
按照int类型举一反一,byte最大值+1应该是最小值,但是println默认打印的是int类型不是byte类型,所以不可以。
类型提升小于四个字节的数据类型运算的时候会发生类型的提升
这样会报错
byte b = 20; byte c = 10; byte d = b+c;
这样的情况需要强制转换类型来避免
byte d = (byte)(b+c);
即可
如图,会报错
byte d = Byte.MAX_VALUE+1;
System.out.println(d);
短整型
没差别
布尔类型只有两种取值,true 和 false
没有0为假,非0为真的说法
public class HelloWorld {
public static void main(String[] args) {
boolean value = true ;
System.out.println(value);
}
}
总结
Java当中的8种基本数据类型分别是以下的:
字节数 1 2 2 4 8 4 8 没有规定
数据类型 byte char short int long float double boolean
包装类 Byte Character Short Integer long Float Double Boolean
字符串类型与c语言不同,不用创建字符数组就可以打印字符串
public class HelloWorld {
public static void main(String[] args) {
String str = ""hello"";//"hello"
System.out.println(str);
}
}
转义字符
String str = ""hello"";//"hello"
在符号前面加 即可
字符串拼接字符串可以用 + 拼接
String a = "hello"; String b = "world"; String c = a + b; System.out.println(c);
还可以用字符串与整数进行拼接
String str = "result = "; int a = 10; int b = 20; String result = str + a + b; System.out.println(result); // 执行结果 result = 1020
只要 + 存在,就是拼接行为
因此我们可以很方便的使用 System.out.println 同时打印多个字符串或数字
int a = 10;
int b = 20;
System.out.println("a = " + a + ",b = " + b)
常量
字面常量
10 // int 字面值常量(十进制) 010 // int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8 0x10 // int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16 10L // long 字面值常量. 也可以写作 10l (小写的L) 1.0 // double 字面值常量. 也可以写作 1.0d 或者 1.0D 1.5e2 // double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2 1.0f // float 字面值常量, 也可以写作 1.0F true // boolen 字面值常量, 同样的还有 false 'a' // char 字面值常量, 单引号中只能有一个字符 "abc" // String 字面值常量, 双引号中可以有多个字符.被final修饰的常量
放在变量的数据类型前,但是不可以二次改变
final int a = 10; a = 99 ; //不可以进行二次修改类型转换 int 和 long/double 相互赋值
可以由小赋大,但是反过来不可以。
int a = 10; long b = 20; a = b; // 编译出错, 提示可能会损失精度. b = a; // 编译通过. int a = 10; double b = 1.0; a = b; // 编译出错, 提示可能会损失精度. b = a; // 编译通过.int 和 boolean 相互赋值
int a = 10; boolean b = true; b = a; // 编译出错, 提示不兼容的类型 a = b; // 编译出错, 提示不兼容的类型
毫不相干的类型不可以转换。
强制类型转换可以解决一些情况,但可能会丢失精度。
和c语言一样,但是毫不相干的类型是不可以强转的。
int a = 0; double b = 10.5; a = (int)b; int a = 10; boolean b = false; b = (boolean)a; // 编译出错, 提示不兼容的类型.理解数值提升 int 和 long 混合运算
int a = 10; long b = 20; int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度 long d = a + b; // 编译通过
long类型和int类型结合会统一提升为long类型。
也就是说字节数小的会自动提升为字节数大的。
想要int接收就得强转。
byte 和 byte 的运算java会自动将小于4个字节数的数据类型在计算时转换为int类型。
byte a = 10; byte b = 20; byte c = a + b; System.out.println(c); // 编译报错 Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失 byte c = a + b;
因此想计算就需要强转
byte c = (byte)(a+b);int和string之间的类型转换
int转string
int a = 10; String str1 = a+""; String str2 = String.valueof(a);
string转int
String str = "100"; int num = Integer.parseInt(str);



