Java基础部分总结―01
1 类型转换
1-1基本数据类型转化
自动转换
- 将取值范围小的类型自动提升为取值范围大的类型。
转换规则
byte、short、char运算时直接提升为int。
public class Main { public static void main(String[] args) { int i = 1; double d = 2.5; System.out.println(i+d);//out 3.5 } }
double 类型内存8个字节, int 类型内存4个字节。因此int类型的i被自动提升成了取值范围大的double。
强制类型转换
将取值范围大的类型强制转换成取值范围小的类型。
转换格式
数据类型 变量名 = (数据类型)被转换数据值
public static void main(String[] args) { int i = 1; double d = 2.5; /* *i是int类型的,d是double类型的,两者相加int类型的i会自动提升为double类型的,因此结果为double类型的 * 当用int类型的result接收的时,会产生大范围向小范围的转化,需要使用强制转换。 * */ // int result = i + d; //错误 int result = (int) (i + d); System.out.println(result);//3 }
注意事项:
- 浮点转换为整数,直接取消小数,不是四舍五入,会造成数据精度变化。
1-2引用类型转化――<多态的转型>
与基本数据类型转换相同,引用数据类型的转换也分为两种:
向上转型:
- 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。(同基本类型的自动转型,向大范围转换)
使用格式
父类引用指向一个子类对象的时候,就是发生了向上转型。
//父类类型 变量名 = new 子类类型(); //如: Animal a = new Cat(); //或者通过函数调用的时候传入参数 Show(new Cat()); void Show(Animal ani){ //...代码段 }
向下转型:
- 父类类型向子类类型向下转换的过程,强制的过程。(同基本类型的强制转换类似,由大转小)
使用格式
- 在强制类型转换前要进行instanceof关键字判断,否则容易报错!
- 【在C#中用is判断,用as转换】
if(变量名 instance 变量类型)
//如果变量属于该数据类型,返回true;
//如果变量不属于该数据类型,返回false; - 子类类型 变量名 = (子类类型) 父类变量名
public static void main(String[] args) { //Object类是所有类的父类 Object obj = "123456"; //判断是否可以转换,由于String类是Object类的子类,故父类向子类转换要进行强制转换 if (obj instanceof String) { String Str = (String) obj;//强制转换 System.out.println(Str); } else { System.out.println("转换失败!"); } } //输出结果为123456;
2 运算符
前++和后++的区别:
- 独立运算:
在独立运算时,二者没有区别。++i和i++最后得到的i的结果相同。
public static void main(String[] args) { int i = 0; int j=i; i++; ++j; System.out.println(i);//out i=1 System.out.println(j);//out j=1 }
唯一的区别
C++中是这样的…
i++在实现的时候,产生了一个local object,使得效率比++i低。
//++i 的版本 NT INT::operator++() { *this=*this+1; return *this; } //i++ 的版本 const INT INT::operator ++(int) { INT oldvalue=*this; *this=*this+1; return oldvalue; }
==可以看出i++返回的是值类型,++i返回的是引用类型,由于引用类型可以作为左值,故可以
++++i;//ok //i++++;//err
- 混合运算
前++:先赋值给其他变量,在自增;
后++:先自增在赋值
public static void main(String[] args) { int i = 0; int j = i; for (int i1 = 0; i1 < 10; i1++) { i = i++; j = ++j; } System.out.println(i);//out i=0 System.out.println(j);//out j=10 }
三目运算符
- 格式
数据类型 变量名 = 布尔类型表达式?结果1:结果2 - 应用
常常可以代替单个if-else语句,使得代码变简洁
public static void main(String[] args) { Random r = new Random(); int i = r.nextInt(10); System.out.println("i=" + i); // if(i>5){ // i++; // } // else { // i--; // } i = i > 5 ? ++i : --i; //使用三目运算符代替if-else,注意要使用++i和--i; System.out.println(i); }
==比较运算符
- 对于基本数据类型:比较的是值
- 对于引用数据类型:比较的是两个对象的地址值
3 数组
定义
格式
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…};
格式
数据类型[] 数组名 = {元素1,元素2,元素3…};
数组的访问
- 采用索引来访问:索引最大值=数组长度-1;
- 数组长度 = 数组名.length;
数组的遍历
采用for(int i=0;i<数组名.length ; ++i )
for(数组类型 遍历变量:数组名)
IDEA快捷键
- 数组遍历 :数组名.fori 或数组名.iter
代码分析
public static void main(String[] args) { //数组的定义 int[] a = new int[10];//方法一,定义了一个int类型的数组a; int[] b = new int[]{1, 2, 3};//方法二,定义并初始化了数组b,其值为1,2,3; int[] c = {4, 5, 6};//方法三,定义并初始化了数组c; //对数组a遍历赋值 for (int i = 0; i < a.length; i++) { a[i] = i; } //对数组a遍历输出 for (int i : a) { System.out.println(i); } }
转载请标明出处:Java基础部分总结--01
文章来源: https://blog.csdn.net/weixin_42828723/article/details/90343410