2018-05-11 第五天
一、条件运算符:
java 中唯一的一个三目运算符。 需要三个操作数(三个表达式)。
语法:表达式-1 ? 表达式-2 :表达式-3 ;
表达式-1: 必须是一个boolean 表达式(返回值是boolean值的表达式)。
表达式-2,3 是java 任意的表达式,但是两个表达式的返回值的类型要兼容。
执行过程:
1:计算表达式-1的返回值。
2:根据表达式-1 的返回值 ,如果是true,那么就执行表达式-2 并返回该值作为整个条件表达式的返回值。
3:如果 表达式-1 的返回值 是 false,那么就跳过表达式-2 ,执行并返回表达式-3 的值。
//条件运算符
public class TestThree{
public static void main(String[] args){
// 随机得到两个随机数,[10-30],打印结果。
// 将两个随机数中比较大的值输出。
//定义区间
final int MIN = 10,MAX = 31;
int num1 = (int)(Math.random()*(MAX-MIN)+MIN);
int num2 = (int)(Math.random()*(MAX-MIN)+MIN);
int num3 = (int)(Math.random()*(MAX-MIN)+MIN);
System.out.println("num1 = "+ num1 + "\tnum2 = "+num2 + "\tnum3 = "+num3);
int max = 0;
// max = num1 > num2 ? num1 : num2;
// max = max > num3 ? max : num3;
max = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);
System.out.println("max = "+max);
}
}
äºã 运算符优先级
规律: 1:乘除取余 优先级大于 加减
2:同级优先级 根据结合性结合。
3:小括号优先级最高。
4:一元运算符大于二元的,二元的大于三元,赋值运算符优先级最低。
口诀:单目算术为关系,逻辑条件后赋值。
单目:单目运算符! + –(负数) ++ --等
乘除:算数单目运算符* / % + -
为:位移二目运算符<< >>
关系:关系二目运算符> < >= <= == !=
逻辑:逻辑二目运算符&& || & | ^
条件:唯一的三目运算符A > B ? X : Y
后:无意义,仅仅为了凑字数
赋值:赋值=
ä¸ã 算术运算时数据类型的转换
注意:java 不支持不同类型的数据之间的运算。
如果是不同类型的数据进行运算,那么编译器会对不同的类型的数据进行类型的统一的转换。转换为统一类型之后才能做运算。
自动类型转换的规则:因为这种转换是安全的。
1:如果操作数 的类型 是 byte,char ,short ,int 中的一个或者几个。那么这些操作数的类型要被自动转换为 int 类型然后再做运算。结果也是int。这种转换不会修改数据的大小,只是数据使用内存空间的大小的变换。
2:如果操作数 的类型 是 byte,char ,short ,int,long 中的一个或者几个,而且有long类型的数据存在。那么这些操作数的类型要被自动转换为long类型然后再做运算。结果也是long。
3:如果所有的操作数的类型中,最大的类型是float,那么所有的操作数的类型都向float转,结果也是float。
float 类型表示的范围大于 long。
4:如果所有的操作数的类型中,最大的类型是double,那么所有的操作数的类型都向double转,结果也是double。
double 类型表示的范围最大。
自动类型转换:
从 int 到 float,有可能损失精度。
int 到 float 可能损失精度,int 最大 2147483647, float 有效数字个数是 6-7, 会失去有效数字个数引起的精度。
float 到 int 会失去小数部分,也就损失精度了。另外, float允许数值范围大于int,超出int允许范围。
åã 赋值时转换
赋值的时候的类型的转换。
1:自动向上类型转换:可以将一个小类型的数据直接赋值给一个大类型的变量。因为安全。小类型向大类型自动转换,因为安全。
2:强制向下类型转换:
整数的强制向下;直接将高位砍掉。
浮点数 到 整数 强转;先直接砍掉小数点。然后再按照整数的规则砍。
强制转换不能确保是安全的。
public class TestChangeType{
public static void main(String[] args){
int age = 10;
byte value = 10;
int num = value;
System.out.println(num);
byte value1 = 12;
byte value2 = 10 + 23;//没有问题
// 在编译期,是不知道变量的值的。但是对于常量值,编译器是可以判断赋值 是否安全。
byte value3 = (byte)(value1 + value2);
System.out.println((short)128.349329329);//-128 1000 0000 0111 1111
}
}
字符串连接时的数据转换:
"123" + 123 :字符串和其他的类型也是不能直接连接的,其他的类型需要转换为字符串才能和字符串做连接。这个基本数据类型的数据到字符串的转换,是由底层的方法调用来完成。
例1:
import java.util.Random;
/*得到一个随机字符[A-Z]or[a-z] (大小写也要随机),并打印。*/
public class TestRandomBoolean{
public static void main(String[] args){
Random ran = new Random();
//定义区间[A-Z][65-90][a-z][97-122]
final int MIN_1 = 65,MAX_1 = 90,MIN_2 = 97,MAX_2 = 122;
System.out.println(ran.nextBoolean() ? (char)(Math.random()*(MAX_1 - MIN_1) + MIN_1) : (char)(Math.random()*(MAX_2 - MIN_2) + MIN_2));
}
}
例2:
import java.util.Random;
/*随机生成两个数,[0-100],然后输出,然后实现用一个int类型的变量num 保存两个数的算法.*/
public class TestMemory{
public static void main(String[] args){
Random ran = new Random();
//定义区间[10-100]
final int MIN = 10,MAX = 101;
int num1 = (int)(Math.random()*(MAX - MIN) + MIN);
//获得的随机数可能为负,>>> 1 转换成 正整数;
int num2 = (ran.nextInt() >>> 1) % (MAX - MIN) + MIN;
System.out.println("第一个数 = " + num1 + "\t第二个数 = " + num2 );
int num3 = num1 << 16;
int num4 = num2 | num3;
System.out.println("存储的int型 = " + num4 );
int num5 = num4 & 0b1111111111111111;
int num6 = num3 >> 16;
System.out.println("==========================================\n解出来第一个数 = " + num6 + "\t解出来第二个数 = " + num5 );
}
}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
深入理解SpringBoot之自动装配
SpringBoot的自动装配是拆箱即用的基础,也是微服务化的前提。其实它并不那么神秘,我在这之前已经写过最基本的实现了,大家可以参考这篇文章。这次主要的议题是,来看看它是怎么样实现的,我们透过源代码来把握自动装配的来龙去脉。 一、自动装配过程分析 1.1、关于@SpringBootApplication 我们在编写SpringBoot项目时,@SpringBootApplication是最常见的注解了,我们可以看一下源代码: /* * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * *...
-
下一篇
杨校老师课堂之JavaScript右下角广告弹框教程
案例制作思路: 1、先制作界面 添加一个盒子包含一个按钮,使盒子绝对定位在右上角 添加一个大盒子,同理,将盒子居于左下角;其中内部包含一个顶端盒子和底部盒子 顶端盒子因为是属于大盒子内部的存在,所以宽度是占满整个大盒子的宽度,内部文本设置字体12号、居中显示、加粗 底部盒子因为也是属于大盒子内部的存在,所以宽度也是占满整个大盒子的宽度,内部文本设置字体12号、居中显示、加粗、行高等 2、经思考分析,因为页面是在打开后3秒中进行跳转,所以需要一个延迟定时器(SetTimeout(code,millisec); code是代表一个函数的引用,millisec代表定时的毫秒数) 。所以页面一打开是没有广告存在的,所以在大盒子的css中不存在高度的设置,另设置了隐藏显示的属性! 3、获取盒子的位置,并且设置其高度,进行接收。但是因为后的是一个对象,需要将对象进行转换成为数字。 4、如果该数字等于0 ,表示该盒子处于隐藏的状态,则将其通过display属性中的block块状 来显现出来。【此时在右下角已然存在盒子了,只不过高度为0,需要放大进行查看】 5、接下来,我们来操作盒子的高度问题...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL数据库在高并发下的优化方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果