基本类型都不能为空,引用类型可以为空。包装类是引用类型
变量作用域
•
在C,C++和Java里,作用域是由花括号的位置决定的。
•
离开作用域,变量所分配的内存空间将被JVM回收
{
int x = 12;
{
int x = 96; /* java里非法:因为重复定义;c里合法 */
}
}
•
在同一作用域范围的包裹下成员变量名和局部变量名是可以变量名相同的,在同一个作用域范围的包裹下局部变量和局部变量不可以变量名相同(作用域内不能重复命名),在方法中使用变量的时候如果不指明使用成员变量还是局部变量,那么默认的就是使用局部的那个变量
变量类型
数据类型分为基本数据类型和引用数据类型
常量
//字符串常量
System.out.println("Hello world");
//整数常量(默认int)
System.out.println(100);
//小数常量(默认double)
System.out.println(1.2356);
//字符常量
System.out.println('a');
//布尔常量
System.out.println(true);
//空常量
//System.out.println(null);
•
byte
从int转到byte会报错 >> 错误: 不兼容的类型: 从int转换到byte可能会有损失
strbyte = str.getBytes("UTF-8");
String res = new String(strbyte,0,strbyte.length,"UTF-8");
byte b1 = 10;
byte b2 = 20;
int b3 = b1+b2;//30
•
short
•
int
•
Ingeter 引用数据类型; 是int的包装类,int的初值为0,Ingeter的初值为null;
•
long 2^63 9*(10^18)
•
数据类型小的变量与数据类型大的变量进行运算的时候,自动转为运算中最大的数据类型
•
byte,short,char 在做运算的时候,自动提升为int
•
程序中的整数默认类型都是int,如果整数超出int的范围的话,在整数的后面加上l或者L
long l = 10000000000000000l;
•
程序中的小数默认都是double数据类型,所以给float变量赋值的时候在小数的后面加上f或者F
float f = 3.1f;
•
float
•
double.
•
boolean
类型转换
•
隐式转换
float f = 10.1001d
•
显式转换(只有基本数据类型可以这么转,String就不能这么用,要么用toString转,要么用构造函数)
a=(int)b
//数字都默认是int,小数默认是double,赋值给其它类型的变量要转换一下.
public static void main(String[] args)
{
//定义变量b并初始化
byte b = 100;
//重新赋值
b = 127;// 错误: 不兼容的类型: 从int转换到byte可能会有损失
System.out.println(b);
short s = 1000;
System.out.println(s);
int i = 1000000000;
System.out.println(i);
//程序中的整数默认类型都是int,如果整数超出int的范围的话,在整数的后面加上l或者L
long l = 10000000000000000l;//Variable.java:30: 错误: 过大的整数: 10000000000
System.out.println(l);
//程序中的小数默认都是double数据类型,所以给float变量赋值的时候在小数的后面加上f或者F
float f = 3.1F;//错误: 不兼容的类型: 从double转换到float可能会有损失
System.out.println(f);
double d = 4.5;
System.out.println(d);
char c = '我';
System.out.println(c);
boolean b1 = false;
System.out.println(b1);
}
int ←→ byte
private static byte int3(int x) { return (byte)(x >> 24); }
private static byte int2(int x) { return (byte)(x >> 16); }
private static byte int1(int x) { return (byte)(x >> 8); }
private static byte int0(int x) { return (byte)(x ); }
static int getIntL(ByteBuffer bb, int bi) {
return makeInt(bb._get(bi + 3),
bb._get(bi + 2),
bb._get(bi + 1),
bb._get(bi ));
}
static private int makeInt(byte b3, byte b2, byte b1, byte b0) {
return (((b3 ) << 24) |
((b2 & 0xff) << 16) |
((b1 & 0xff) << 8) |
((b0 & 0xff) ));
}
评论区