【JAVASE_学习笔记】数据类型
常量
常量:程序运行中其值不变的量
常量类型:1.字面值常量:
a.整数常量 如12
b.小数常量 如3.14
c.布尔常量 布尔常量只有两个值,true,false
d.字符常量 单个字符使用单引号引起来的内容 如’a’
e.字符串常量 数据内容使用双引号引起的内容 如”helloworld”
f.空常量 null
2.自定义常量(与关键字:final有关:面向对象部分讲解)
public class ConstantDemo {
public static void main(String[] args) {
//字符串常量
System.out.println("helloworld");
//字符串 +(拼接符号) 任何数据 = 字符串
System.out.println("helloworld"+'a'+1);//helloworlda1
System.out.println('a'+1+"helloworld");//98helloworld
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5
System.out.println("------------------------");
//字符常量
//不参与运算
System.out.println('A');
System.out.println('a');
System.out.println('0');
// System.out.println('ab');//错误
System.out.println("------------------------");
//当字符参与运算的时候,就需要带ASCII码表中找字符对应的值
//'A'---->65
//'a'---->97
//'0'---->48
System.out.println('A'+1);//66
System.out.println('a'+1);//98
System.out.println('0'+1);//49
System.out.println("----------------------");
//整数常量
System.out.println(100);
//小数常量
System.out.println(3.1415926);
System.out.println("-------------------");
//布尔常量
System.out.println(true);
System.out.println(false);
//空常量
String s = null ;//针对引用类型
System.out.println(s);
}
}
变量
变量:程序运行中其值可以发生变化的量
A.八种基本数据类型
1.整数类型:
byte (字节) 1字节(8bit) 范围:-128~127
short (短整型) 2字节(16bit)
int (整型) 4字节(32bit)
long (长整型) 8字节(64bit)
2.小数类型:
float (单精度浮点型) 4字节(32bit)
double (双精度浮点型) 8字节(64bit)
3.布尔类型:
boolean (布尔类型) 1个或4个字节
用于声明一个基本类型变量时占四个字节
用于声明一个数组类型时,数组中每个元素占一个字节
4.字符类型:
char (字符类型) 2个字节
B.引用类型 如String
注意:
对于整数类型:
默认的类型:int类型
使用long类型定义变量,在当前变量值的后面加上L或者l(推荐使用L),告诉系统我定义的是一个long类型
浮点类型:
默认双精度:double
定义float类型,在该变量值的末尾跟上F或者f
public class DataTypeDemo {
public static void main(String[] args) {
//byte类型
byte b = 100 ;
System.out.println(b);
System.out.println("--------------");
//短整型
short s = 20 ;
s = 50 ;
System.out.println("s:"+s);
System.out.println("--------------");
// int i = 1000000000000;
// System.out.println("i:"+i);
//长整型
long l = 1000000000000L;
System.out.println("l:"+l);
//浮点类型:默认double类型
double d = 12.56 ;
System.out.println("d:"+d);
//单精度
float f = 12.34F ;
System.out.println("f:"+f);
//由于浮点类型存储和整数类型的存储不一致.导致:永远是一个近似值:BigDecimal
// System.out.println(1.0-0.32);
//char类型
char ch = 'A' ;
System.out.println(ch);
//boolean类型
boolean flag = true;
System.out.println(flag);
}
}
变量的定义(声明)
格式:
方式一:数据类型 变量名;
方式二:数据类型 变量1,变量2…;
注意:
1.在java中,定义一个变量不能重复定义
2.建议不要再同一行上定义多个变量
3.定义变量不能以数字开头
public class DataTypeDemo2 {
public static void main(String[] args) {
//定义变量
int a = 10 ;
// int a = 20 ;
a = 20 ;
//一行定义多个变量,中间用逗号隔开
// int m = 10 ,n = 20 ,x = 30 ;
int m = 10 ;
int n = 20 ;
int x = 30 ;
//不能以数字开头
// int 2z = 40 ;
}
}
数据类型转换
注意:
1.byte,short,char类型数据在运算时自动转换成int类型再运算
2.两个不同类型数据运算,结果取决于大的数据类型数据
如 int类型数据+long类型数据 结果为long类型
小数据类型——>大数据类型 自动类型转换
大数据类型——>小数据类型 强制类型转换(会损失精度)
强制类型转换格式:
目标数据类型 变量名=(目标数据类型)(大数据类型数据)
练习:
/*
* 面试题:
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢
第一句编译失败:存在默认类型转换,如果想让改代码不报错,正常运行,必须强制类型转换
第三句话:b = 3 + 4 ;属于常量相加,先相加---->看结果是否在当前该数据类型范围内,在就不会报错!
* */
public class DataTypeDemo3 {
public static void main(String[] args) {
byte b1 = 3,b2 = 4 ,b ;
// b = b1 + b2 ;//错误的:byte类型不可能接收一个int类型的值
b = (byte)(b1 + b2) ;
b = 3 + 4 ;
System.out.println("b:"+b);
}
}
负数的存储
负数的最高位为1,正数最高位为0
负数在计算机中存储的是补码
补码运算步骤(负数):
1.先得到负数的二进制码(原码);
2.最高位不变,原码取反(反码);
3.反码加一 (补码)
正数的原码,反码,补码相同
练习:
/*
* 面试题
byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
有问题:超出范围:byte的取值范围:-128~127
想让 赋值正确,就必须强制类型转换,结果-126
* */
public class DataTypeDemo4 {
public static void main(String[] args) {
//定义变量
byte b =(byte)130 ;
System.out.println("b:"+b);
}
}
/*
* 130看成四个字节:默认int类型
* 计算出对应的二进制数据
* 00000000 00000000 0000000 10000010
*
* 最高符号位是0,当前整数,该数据对应的原码,反码,补码都一样
*
* 计算机底层是通过补码进行运算:byte b = (byte)130;
* 10000010(补码)----->原码
*
* 最高符号位 数值位
* 1 0000010 补码
* -1
* 1 0000001 反码 --->最高符号位不变,数值位按位取反
* 1 1111110
*
* 结论:
* - 64+32+16+8+4+2
* - 126
*
* */