数据类型转换
java程序中要求参与的计算的数据,必须保证数据类型的一致性,如果数据类型不一致将发生类型的转换
自动转换
一个int类型变量和一个byte类型变量进行加法运算,结果回事什么数据类型?
1:int i = 1; 2:byte b = 2;
运算结果,变量的类型将是int类型,这就是出现了数据类型的自动类型转换现象。
自动转换:将取值范围小的类型,自动提升为取值范围大的类型
数据类型自动转换代码 /*
*当数量类型不一样时,将会发生数据类型转换*
*自动转换类型(隐式)* 1. 特点:代码不需要进行特殊处理,自动完成* 2. 规则:数据范围从小到大*
*强制转换类型(显式)* */
public class Demo01DataType {
public static void main(String[] args) {
System.out.println(1024); //这是一个整数,默认就int类型
System.out.println(3.14); //这就是一个浮点数,默认就是double类型
//左边是long类型,右边是默认的int类型,左右不一样
//一个等号代表赋值,将右侧的int常量,交给左侧的long变量进行存储
//int--> long,符合了数据范围从小到大的要求
//这一行代码发生了自动类型转换
long num1 =100;
System.out.println(num1); //100
//左边是double类型,右边是float类型,左右不一样
//float-->double,符合从小到大的规则
//也发生了自动类型变换
double num2 =2.5F;
System.out.println(num2); //2.5
//左边是float类型,右边是long类型,左右不一样
//long-->float,范围是float更大一些,符合从小到大的会泽
//也发生了自动类型转换
float num3 =30L;
System.out.println(num3); //30.0
}
}
数据类型强制转换
将1.5赋值到int类型变量会发生什么?产生编译失败,肯定无法赋值。
1 int i = 1.5; //错误
double类型内存8个字节,int类型内存4个字节。1.5是double类型,取值范围大于int。可以理解为double是8升的水壶,int是4升的水壶,不能把大水壶中的水直接放进小水壶去。
想要赋值成功,只有通过强制类型转换,将double类型强制转换成int类型才能赋值。
强制类型转换:将取值范围大的类型强制转换成取值范围小的类型。
比较而言,自动转换是java自动执行的,而强制转换需要我们自己手动执行
转换格式: 1 数据类型 变量名 = (数据类型)被转数据值
将1.5赋值到int类型,代码改为:
1 //double类型数据强制转换成int类型。直接去掉小数点。
2 int i = (int)1.5;
同样道理,当一个short类型与1相加,我们知道会类型提升,但是还先给结果赋值给short类型变量,就需要强制转换。
强制类型转换代码: /*
* 强制类型转换* 1. 特点:代码需要进行特殊的格式处理,不能自动完成* 2. 格式:范围小的类型 范围小的变量名 =(范围小的类型) 原本范围的数据;* */
public class Demo02DataType {
public static void main(String[] args) {
//左边int类型,右边是long类型,不一样
//long-->int,不是从小到大
//不能发生自动类型转换!
// 2. 格式:范围小的类型 范围小的变量名 =(范围小的类型) 原本范围的数据;
int num = (int) 100L;
System.out.println(num); //100
}
}
数据类型转换_注意事项
代码 /*
* 强制类型转换* 1. 特点:代码需要进行特殊的格式处理,不能自动完成* 2. 格式:范围小的类型 范围小的变量名 =(范围小的类型) 原本范围的数据;*
*注意事项:* 1.强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。* 2.byte/short/char这三种类型都可以发生数字运算,例如加法“+”。* 3.byte/short/char这三种类型载运算的时候,都会被首先提升成为int类型,然后在计算。* 4.boolean类型不能发生数据类型转换* */
public class Demo02DataType {
public static void main(String[] args) {
//左边int类型,右边是long类型,不一样
//long-->int,不是从小到大
//不能发生自动类型转换!
// 2. 格式:范围小的类型 范围小的变量名 =(范围小的类型) 原本范围的数据;
int num = (int)100L;
System.out.println(num); //100
int num2 = (int)6000000000L;
System.out.println(num2); //1705032704
// double-->int,强制类型转换
int num3 = (int)3.5;
System.out.println(num3); // 3.这并不是四舍五入,所有的小数位都会被舍弃掉
char zifu1 ='A'; //这是一个字符型变量,里面是大写字母A
System.out.println(zifu1 +1); // 66,也就是大字幕A被当做60进行处理
//计算机的底层会用一个数字(二进制)来代表字符A,就是65
//一旦char类型进行了数字运算,那么字符就会按照一定的规则翻译成为一个数字
byte num4 =40; //注意!右侧的数值大小不能超过左侧的类型范围
byte num5 =50;
// byte + byte --> int + int --> int
int result1 = num4 + num5;
System.out.println(result1); //90
short num6 =60;
// byte + short --> int + int --> int
// int强制转换为short:注意必须保证逻辑上的 真实大小本来就没有超过short范围,否则会发生数据溢出
int result2 = num4 + num6;
System.out.println(result2); //100
}
}
ASCII编码表 代码 /*
* 数字和字符的对照关系表(编码表):*
* ASCII码表:American Standard Code for Information Interchange,美国信息交换标准代码。* Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开头包含有更多字符。*
* 48 - '0'
* 65 - 'A'
* 97 - 'a'
* */
public class Demo03DataType {
public static void main(String[] args) {
char zifu1 ='1';
System.out.println(zifu1 +0); // 49
char zifu2 ='A'; // 其实底层保存的是65数字
char zifu3 ='c';
//左侧是int类型,右侧是char类型。
//char --> int,确实是从小到大
//发生了自动类型转换
int num = zifu3;
System.out.println(num); // 99
char zifu4 ='中'; // 正确写法
System.out.println(zifu4 +0); // 20013
}
}
算数运算符
算数运算符包括
+ 加法运算,字符串连接运算
- 减法运算
* 乘法运算
/ 除法运算
% 取模运算,两个数字相除取余数
++、-- 自增自减运算
java中,整数使用以上运算符,无论怎么计算,也不会得到小数。
1 public static void main (String[] args) {
2 int i = 1234;
3 System.out.println(i/1000*1000); //计算结果是1000
4 }
++ 运算,变量自己增长1.反之, -- 运算,变量自己减少1,用法与 ++ 一致。
算术运算符_四则与取模运 代码 /*
* 运算符:进行特定操作的符号。 例如:+
* 表达式:用运算符连起来的式子叫做表达式。 例如: 20 + 5。 又例如:a + b
*
* 四则运算:* 加:+
* 减:-
* 乘:*
* 除:/
*取模(取余数):%
*
* 首先计算得到表达式的结果,然后再打印输出这个结果* 复习一下小学一年级的除法公式:* 被除数 / 除数 = 商 ... 余数*
* 对于一个整数的表达式来说,除法用的是整数除,整数除以整数,结果仍然是整数,只看商,不看余数。* 只有对于整数的除法来说,取模运算符才有余数的意义*
* 注意事项:* 1. 一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。* */
public class Demo04Operator {
public static void main(String[] args) {
//两个常量之间可以进行数学运算
System.out.println(20 +30);
//两个变量之间也可以进行数学运算
int a =20;
int b =30;
System.out.println(a - b); //-10
//变量和常量之间可以混合使用
System.out.println(a *10); //200
int x =10;
int y =3;
int result1 = x / y;
System.out.println(result1); //3
int result2 = x % y;
System.out.println(result2); //余数,模,1
// int + double --> double + double --> double
double result3 = x +2.5;
System.out.println(result3); //12.5
}
}
算数运算符_加号的多种 代码:/*
* 四则运算当中的加号“+”有常见的三种方法:*
*1. 对于数值来说,那就是加法*2. 对于字符char类型来说,在计算之前,char就会被提升成为int,然后在计算。* char类型字符,和int类型数字,之间的对照关系表: ASCII、Unicode
*3. 对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。* 任何数据类型的字符串进行连接的时候,结果都会变成字符串* */
public class Demo05Plus {
public static void main(String[] args) {
//字符串类型的变量基本使用
//数据类型 变量名称 = 数据值;
String str1 ="Hello";
System.out.println(str1); // Hello
System.out.println("Hello" +"World"); // HelloWorld
String str2 ="Java";
System.out.println(str2 +20); // Java20
// 优先级问题
// String + int + int
// String + int
// String
System.out.println(str2 +20 +30); // Java2030
}
}
算术运算符_自增自减运 代码:/*
*自增运算符:++
*自减运算符:--
*
* 含义: 让一个变量涨一个数字1,或者让一个变量降一个数字1
* 使用格式:写在变量名称之前,或者写在变量名称之后。例如: ++num, 也可以num++
* 使用方式:* 1. 单独使用:不和其他任何操作混合,自己独立成为一个步骤* 2. 混合使用:和其他操作混合,例如与赋值混合,或者与打印操作混合,等。* 使用区别:* 1.在独立使用的时候,前++和后++没有任何区别,也就是:++num;和num++;是完全一样的。* 2.在混合的时候,有【重大区别】* A. 如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。 【先加后用】* B. 如果是【后++】,那么首先使用变量本来的数值,【然后再让变量+1】 【先用后加】*
* 注意事项:* 只有变量又能使用自增、自减运算符。常量不可能发生改变,所以不能用。*/
public class Demo06Operator {
public static void main(String[] args) {
int num1 =10;
System.out.println(num1); //10
++num1; // 单独使用,前++
System.out.println(num1); //11
num1++; // 单独使用,后++
System.out.println(num1); //12
System.out.println("=========");
// 与打印操作混合的时候
int num2 =20;
// 混合使用,先++,变量立刻马上变成21,然后打印结果21
System.out.println(++num2); // 21
System.out.println(num2); //21
System.out.println("=========");
int num3 =30;
// 混合使用,后++,首先使用变量本来的30,然后再让变量+1得到31
System.out.println(num3++); // 30
System.out.println(num3); // 31
System.out.println("=========");
int num4 =40;
//和赋值操作混合
int result1 = --num4; // 混合使用,前--,变量立刻马上开始-1变成39,然后将结果39交给result1变量
System.out.println(result1); // 39
System.out.println(num4); // 39
System.out.println("=========");
int num5 =50;
// 混合使用,后--,首先把本来的数字50交给result2,然后我自己在-1变成49
int result2 = num5--;
System.out.println(result2); // 50
System.out.println(num5); // 49
System.out.println("=========");
int x =10;
int y =20;
// 11 + 20 31
int result3 = ++x + y--;
System.out.println("result3"); // 31
System.out.println(x); // 11
System.out.println(y); // 19
// 30++; //错误写法!常量不可以使用++或者--
}
}
赋值运算符
赋值运算符包括:
= 等于号 += 加等号 -= 减等号
*= 乘等好 /= 除等号 % 取模等
赋值运算符,就是将符号右边的值,赋给左边的值。
代码: /*
* 赋值运算符分为:*
* 基本赋值运算符:就是一个符号”=“,代表将右侧的数据交给左侧的变量。* int a = 30;*
* 复合赋值运算符:* += a += 3 相当于a = a + 3
* -= b -= 4 相当于b = b - 4
* *= c *= 5 相当于c = c * 5
* /= d /= 6 相当于d = d / 6
* %= e %= 7 相当于e = e % 7
*
* 注意事项:* 1: 只有变量才能使用赋值运算符,常量不能进行赋值。* 2: 复合赋值运算符其中隐含了一个强制了类型转换。* */
public class Demo07Operator {
public static void main(String[] args) {
int a =10;
// 按照公式进行翻译:a = a + 5
// a = 10 + 5;
// a = 15;
// a本来是10,现在重新赋值得到15
a +=5;
System.out.println(a); // 15
int x =10;
// x = x % 3;
// x = 10 % 3;
// x = 1;
// x本来是10,现在重新赋值得到1
x %=3;
System.out.println(x); // 1
// 50 = 30; // 常量不能进行赋值,不能写在赋值运算符的左边,错误写法!
byte num =30;
// num = num + 5;
// num = byte + int
// num = int + int
// num = int
// num = (byte) int
num +=5;
System.out.println(num); // 35
}
}
比较运算符
比较运算符包括:
== 比较符号两边数据是否相等,相等结果是true。
< 比较符号左边的数据是否小于右边的数据,如果小于的结果是true。
> 比较符号左边的数据是否大于右边的数据,如果大于的结果是true。
<= 比较符号左边的数据是否小于或者等于右边的数据,如果小于的结果是true。
>= 比较符号左边的数据是否大于或者等于右边的数据,如果大于的结果是true。
!= 不等于符号,如果符号两边的数据不相等,结果是true。
比较运算符,是两数据之间进行比较的运算,运算结果都是布尔值true或者false。
代码: /*
* 比较运算符:* 大于:>
* 小于:<
* 大于等于:>=
* 小于等于:<=
* 等于: == 【两个等号连写才是相等,一个等号代表的是赋值】* 不相等: !=
*
* 注意事项:* 1. 比较比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false
* 2. 如果进行多次判断,不能连这写。* 数学当中的写法,例如:1 < x > 3
* 程序当中【不允许】这种写法。*
* */
public class Demo08Operator {
public static void main(String[] args) {
System.out.println(10 >5); //true
int num1 =10;
int num2 =12;
System.out.println(num1 < num2); // true
System.out.println(num2 >=100); // false
System.out.println(num2 <=100); // true
System.out.println(num2 <=12); // true
System.out.println("=======");
System.out.println(10 ==10); // true
System.out.println(20 !=25); // true
System.out.println(20 !=20); // false
int x =2;
//System.out.println(1 < x < 3); //错误写法!编译报错!不能连着写
}
}