/*
关于java的数据类型:
1、数据类型的作用:
是指导JVM在运行程序的时候给
该数据分配多大的内存空间
2、java数据类型分为两类:
* 基本数据类型
* 引用数据类型
3、关于基本数据类型:
* 基本数据类型分为四大类八小种:
第一类:整数型
byte,short,int,long
第二类:浮点型
float,double
第三类:布尔型
boolean
第四类:字符型
char
4、字符串"abc"不属于基本数据类型,
属于“引用数据类型”
* 字符串使用双引号 "abc"
* 字符使用单引号 'a'
5、字节(Byte):
1 Byte = 8 bit 【1个字节 = 8个比特位】
1个比特位表示一个二进制位:1/0
1 KB = 1024 Byte
数字都是有正负之分的,
在数字的二进制位的最左边称为“符号位”,
0表示正数,1表示负数
6、八个基本数据类型各自占用空间大小:
基本数据类型 占用空间大小【单位:字节】
-------------------------------------------
byte 1
short 2
int 4
long 8
float 4
double 8
boolean 1
char 2
7、八种基本数据类型的默认值
数据类型 默认值
-------------------------------
byte,short,int,long 0
float,double 0.0
boolean false
char \u0000
8、八种数据类型的取值范围
类型 取值范围
----------------------------------
byte [-128~127]
short [-32768~32767]
int [-2147483648~2147483647]
long
float
double
boolean [true,false]
char [0~65535]
*/
public class DateType
{
static int k = 1000;
//成员赋值没有手动赋值系统会默认赋值【局部变量不会】
static int f;
public static void main (String[] args){
System.out.println(k);
System.out.println(f);
//定义一个char类型的变量,起名c,同时赋值字符'a'
char c = 'a';
System.out.println(c);
//一个中文占用2个字节,char正好是2个字节
//所以java总的char类型变量可以存储一个中文字符
char x = '国';
System.out.println(x);
//ab是字符串不能使用单引号括起来
//char y = 'ab'; 错误
//"a"是字符串类型,k变量是char类型,编译错误
//char k = "a"
}
}
/*
System.out.println()与System.out.print()区别:
println输出之后换行,print表示输出但是不换行
java当中的char类型:
转义字符 \
\n 换行符
\t 制表符
\' 普通单引号
\\ 普通反斜杠
\" 普通双引号
\u 后面的数字是某个文字的unicode编码
JDK中自带的native2ascii.exe命令,
可以将文字转换为unicode编码形式
在命令行输入native2ascii.exe,回车,
再输入中文即可得到unicode的值
*/
public class DateTypeTest01
{
public static void main(String[] args){
//下面属于“换行符”,属于char类型的数据
char c2 = '\n';
System.out.print('A');
System.out.print(c2);
System.out.println('B');
char n = '\u4e2d';
System.out.println(n);
}
}
/*
关于java语言当中的整数型:
1、java语言当中的“整数型字面值”被默认当作int类型处理
要让“整数型字面值”被当做long类型来处理的话,
需在“整数型字面值”后面添加l/L,建议使用大写的L
2、java语言当中的整数型字面值有三种表示方法
第一种方式:
十进制【是一种缺省默认的方式】
第二种方式:
八进制
【在编写八进制整数型字面值时需以0开始】
第三种方式:
十六进制
【在编写十六进制整数型字面值时需以0x开始】
*/
public class DateTypeTest02
{
public static void main(String[] args){
int a = 10;
int b = 010;
int c = 0x10;
System.out.println(a); //10
System.out.println(b); //8
System.out.println(c); //16
//2147483647字面值是int类型,占用4个字节
//y是long类型,占用8个字节,自动转换类型
long y = 2147483647;
System.out.println(y);
//编译错误:过大的整数
//2147483648被当做int类型,但字面值超出int类型范围
//long z = 2147483648;
//错误解决
long z = 2147483648L;
System.out.println(z);
}
}
/*
1、类型转换
当一个整数字面值没有超出byte,short,char的取值范围,
这个字面值可以直接赋值给byte,short,char类型的变量
2、计算机二进制有三种表示形式
原码、反码、补码
计算机任何情况下底层表示和存储数据时使用补码形式
正数的补码:
和原码相同
负数的补码:
负数的绝对值对应的二进制码
所有的二进制取反,再加1
补码:10000000
* -128
* 10000000 - 1 --> 01111111 --> 128
*/
public class DateTypeTest03
{
public static void main (String args[]){
//100L是long类型字面值,可以直接赋值
long x = 100L;
//x变量是long类型,8个字节
//y变量是int类型,4个字节
//以下编译错误,大容量不能直接赋值给小容量
//int y = x;
//大容量转换为小容量,
//需进行强制类型转换,需加“强制类型转换符”
//但是运行阶段可以损失精度,所以谨慎使用
//强转原理:把八位二进制强制砍掉左边四位
int y = (int)x;
//注意:在java语言中,
//当一个整数型字面值没有超过byte类型的取值范围,
//该字面值可以直接赋值给byte类型的变量
byte b = 127; //可以
//byte c = 128 //编译错误
//使用强制类型转换符
byte c1 = (byte)128; //-128
System.out.println(c1);
}
}
/*
关于浮点型数据类型:
float 单精度【4个字节】
double 双精度【8个字节,精度较高】
在java语言当中,所有的浮点型字面值,
默认被当作double类型来处理。
要想该字面值当作float类型来处理,
需要在字面值后面添加F/f。
注意:
double和float在计算机内部二进制存储
的时候存储的都是近似值,例如3.333...
*/
public class DateTypeTest04
{
public static void main(String[] args){
//3.0是double类型的字面值,
//d是double类型的变量,不存在类型转换
double d = 3.0;
System.out.println(d);
//5.1是double类型的字面值,
//f是float类型的变量,以下程序编译错误
//float f = 5.1;
//解决方案
//第一种:
//float f = (float)5.1;
//第二种:
float f = 5.1f;
}
}
/*
关于布尔型数据类型:boolean
在java语言当中boolean类型只有两个值:true、false
*/
public class DateTypeTest05
{
public static void main(String[] args){
//编译错误:不兼容的类型
//boolean flag = 1;
boolean loginSuccess = true;
//if语句
if(loginSuccess){
System.out.println("恭喜你,登陆成功");
}else{
System.out.println("对不起,密码错误");
}
}
}
/*
关于基本数据类型的相互转换的转换规则:
1、八种基本数据类型当中除了布尔类型之外
剩下七种类型之间都可以相互转换
2、小容量向大容量转换,称为自动类型转换,
容量从小到大排序:
byte < short < int < long < float < double
char <
注:
任何浮点型不管占用多少字节,都比整数型容量大。
char和short可表示的种类数量相同,
但char可以取更大的正整数。
3、大容量转换成小容量,叫做强制类型转换,
需加强制类型转换符,但可能会损失精度
4、当整数字面值没有超出byte,short,char的取值范围,
可直接赋值
5、byte,short,char混合运算的时候,
各自先转换为int类型再运算
6、多种数据类型混合运算,
先转换成容量大的那种类型再做运算
注意:
byte b = 3; 可以编译通过
int i
byte b = i / 3; 编译错误,编译器只检查语法,
i/3是int类型,不能赋值给byte
*/