数据类型
强类型语言
要求变量的使用严格符合规范,所有变量都必须先定义后才能使用
优点:更安全,但是相对比较慢
public class Day02 {
public static void main(String[] args) {
//必须有初值(强类型语言要求)
String a;
int b;
System.out.println(a);
}
}
弱类型语言
要求变量的使用严格符合规范,eg:JS,VB
优点:速度快,但是相对慢
JAVA的数据类型分为两大类
基本类型(primitive type)
引用类型(Reference Type)
- 类
- 接口
- 数组
import com.sun.management.VMOption;
/**
* @author gaochuang
* @version 1.0
*/
public class Day02 {
public static void main(String[] args) {
//必须有初值(强类型语言要求)
// String a;
// int b;
// System.out.println(a);
// 整数扩展 :进制 二进制0b 十进制 八进制0 十六进制0x
int i=10;//正常的十进制
int i2=010;//八进制的 ” 10“
int i3=0x10;//十六进制的 “10”
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("============================================");
//====================================================
//浮点数扩展
//最好不要使用浮点数进行比较
//BigDecimal 数学工具类
//================================================
//最好不要使用浮点数进行比较
//最好不要使用浮点数进行比较
//最好不要使用浮点数进行比较
//float 有限的 离散的 数据类型,具有舍入误差,大约的接近的但是不等于
//double
float f=0.1f;//eg:0.1232658545454 但是最后只显示0.1(大约0.1,便于理解)
double d=1.0/10;//0.1
System.out.println(f==d);//false 所以f!=d
float d1=2323232323f;//2.3232323.....最后只显示大约只显示2.3
float d2=d1+1;
System.out.println(d2);
System.out.println(d1==d2);//true 具有舍入误差性 相当于在23232323后面加上个1,太小了 所以舍去了,要是加上个10000000,就不一样了
//============================================
//字符扩展
//============================================
System.out.println("============================================");
char c1='A';
char c2='中';//注意字符要用单引号,字符串要用双引号
System.out.println(c1);
System.out.println((int)c1);//强制转换
System.out.println(c2);
System.out.println((int)c2);//强制转换
System.out.println("=======================================");
//所有字符串的本质还是数字,Unicode表:(a=97, A=65)
char c3='\u0061';
// '\u0061' 第一个是转义字符 0061代表a 在Unicode表中可知
//\t表示制表
//\n表示换行
System.out.println(c3);
System.out.println("=======================================");
//=================================================
//从对象 从内存分析
String sa=new String("Hello World");
String sb=new String("Hello World");
System.out.println(sa==sb);
String sc="Hello World";
String sd="Hello World";
System.out.println(sc==sd);
//布尔值扩展
boolean flag=true;
if (flag==true){}//新手
if (flag){}//老手 这两个相等 意思一样
}
}
类型转换
-
由于Java是强类型的语言,所以要进行运算的时候,需要类型转换
低 --------------------------------------------------------------------------------------高
byte,short,char->int->long->float->double
小数的优先级大于整数
-
运算中,不同类型的数据先转化为同一类型的,然后在进行运算
自然强制类型(由高向低转型,需要强制转换eg:(转换类型)变量名 )
/** * @author gaochuang * @version 1.0 */ public class Day02typeConversion { public static void main(String[] args) { //byte,short,char->int->long->float->double /* 注意点: 1.不能将布尔型进行比较 2.不能把对象转化成不相干的类型 3.在把高容量向低容量进行转换的时候,会出现内存溢出,或者精度问题 * */ int i=500; byte b=(byte)i;// 从高到低的强制转换,导致内存溢出 System.out.println(i); System.out.println(b); System.out.println("==========================================="); System.out.println((int)23.27);//小数点后面的数丢失 精度问题 System.out.println((int)-23.1f); //操作较大的数时候,容易出现,内存溢出的现象 //JDK7的新特性,数字之间可以用下划线来区分 int money=10_0000_0000; int year=20; int total=year*money; long total1=year*money; //最后运行是-1474836480,原因是超过int字节的最大值,导致内存溢出, System.out.println(total); System.out.println(total1);//运行的也是-1474836480,是因为 计算好之后,把值存放在long类型中 //解决方法就是,将year强制转换成long类型就行,转换一个就行 long total2=(long)year*money; System.out.println(total2);//最后成功 } }
自动类型转换
public class Day02typeConversion { public static void main(String[] args) { //byte,short,char->int->long->float->double int x=500; long y=(long)x; System.out.println(y); } }
static void main(String[] args) {
//byte,short,char->int->long->float->double
int x=500;
long y=(long)x;
System.out.println(y);
}
}