Java学习Day12:基础篇2
1.进制之间的转换
private static void jinZhi() { int a =0x12; int b=0b111000; int c=0123; System.out.println(a); System.out.println(b); System.out.println(c); int number =255; String erjinzhi =Integer.toBinaryString(number); System.out.println(erjinzhi);//转回二进制 String bajinzhi =Integer.toOctalString(number); System.out.println(bajinzhi);//转回八进制 String shiliujinzhi =Integer.toHexString(number); System.out.println(shiliujinzhi);//转回十六进制 }
2.基本数据类型
private static void fuzhijileixingzhuanhuan() { byte a =12; a += 2 ; // 首先计算 a + 2,得到一个int类型的值。 // 然后,由于这个值(现在是14)在byte类型的范围内,Java允许将这个值直接赋值给a,而不需要显式的类型转换。这是因为赋值操作触发了自动的类型窄化。 byte b=3+4;//赋值常量不报错 a= (byte) (a+12);//相加+类型转换在一行代码报错,只能强转。 byte d= a+=2; // 对于基本数据类型(如byte, short, int, long, float, double等), // 当你对它们进行算术运算时,结果类型至少会提升到int类型(对于byte, short, 和 char类型) }
3.数据类型转换
public static void main(String[] args) { jinZhi(); fuzhi(); float a = (float) 12.33909; double b =a; System.out.println(b); float c = (float) b; System.out.println(c);
正数原反补不变;
原码变补:从右向左从第一个一后所有位(不带符号位)取反!
4.运算符
private static void leixing() { int a =123; double b =123.123; System.out.println(a/b); System.out.println(a%b); }
在Java中,不同数据类型间进行运算时,结果的数据类型由参与运算的数据类型以及运算的类型(如算术运算、关系运算、位运算等)共同决定。但对于算术运算(加、减、乘、除等)和位运算(与、或、非、异或、位移等),主要遵循以下规则:
-
自动类型提升(Promotion):在进行算术运算或位运算时,如果操作数具有不同的数据类型,那么较低类型的数据会被提升(转换)为较高类型的数据。这通常指的是从
byte
、short
、char
提升到int
(在算术运算中),如果有一个操作数是long
类型,则另一个也会被提升为long
;如果有一个操作数是float
类型,则另一个也会被提升为float
(注意,这里char
、short
、byte
到int
的转换是隐式的,但int
到float
、long
或double
的转换在某些情况下可能需要显式转换,尽管在算术运算中通常是自动的);如果有一个操作数是double
类型,则另一个也会被提升为double
。 -
赋值时的类型转换:当运算结果需要被赋值给一个变量时,如果运算结果的类型与变量的类型不匹配,那么可能需要进行类型转换(无论是隐式的还是显式的)。隐式类型转换发生在类型提升的结果可以直接赋值给目标变量类型时(如
int
类型的结果赋值给byte
类型的变量,但这会导致数据丢失,通常不推荐这样做,除非确定结果在目标类型的范围内)。如果类型不兼容,则需要显式转换(如(byte)result
)。 -
关系运算和逻辑运算:关系运算(如
==
、<
、>
等)和逻辑运算(如&&
、||
、!
等)的结果总是boolean
类型,不受操作数类型的影响。 -
字符串连接:当使用
+
运算符连接字符串和其他类型的数据时,其他类型的数据会被转换为字符串(这是+
运算符在字符串上下文中的重载行为),然后执行字符串连接操作。
因此,在Java中,不同数据类型间的运算结果数据类型主要由参与运算的数据类型以及运算类型决定,其中自动类型提升是理解运算结果类型的重要概念。
5.算术运算符++,--的操作
private static void yunsuan() { int a =3; a+=a;//a=6 System.out.println(a); int b =4; System.out.println(b++ + ++a);//b=5 a=6 System.out.println(b); System.out.println(a);//a=7,运算后++ System.out.println(++b + ++a); System.out.println(b); System.out.println(a); }
6.赋值运算符
private static void yunsuanss() { System.out.println(10 / 4); //从数字来看是2.5, java中 2 System.out.println(10.0 / 4); //java是2.5 double d = 10 / 4; //java中10 /4 = 2, 2=>2.0 System.out.println(d); //2.0 System.out.println(10 % 3); //10除以三的余数 1 System.out.println(-10 % 3); // -1 System.out.println(10 % -3); // 在Java中,取模运算符 % 的行为是得到两数相除的余数。当涉及到负数时, // Java的取模运算符的行为是依赖于被除数和除数的符号的,但主要规则是结果的符号与被除数相同。 System.out.println(-10 % -3); // -1 }
7.比较、逻辑运算符
private static void bijiao() { // & //两边都是真,结果才是真。 System.out.println(true & true);//true System.out.println(false & false);//false System.out.println(true & false);//false System.out.println(false & true);//false System.out.println("==================================="); // | 或 //两边都是假,结果才是假,如果有一个为真,那么结果就是真。但是&&和|的效率高,因为判断条件不同。 System.out.println(true | true);//true System.out.println(false | false);//false System.out.println(true | false);//true System.out.println(false | true);//true }
8.三目运算符
什么是三目运算:(布尔表达式 ? 值0:值1;)
Java提供了一个特别的三元运算符(也叫三目运算符)经常用于取代某个类型的if-then-else语句。条件运算符的符号表示为“?:”,使用该运算符时需要三个操作数,因此称其为三目运算符。使用条件运算符的一般语法结构为:
result=expression?statement1:statement3;
其中expression是一个布尔表达式.当expression为真时,执行statement1,否则就执行statement3。此三目运算符要求返回一个结果,因此要实现简单的二分支程序,即可使用该条件运算符。
int x,y,z;
x=6;
y=2;
z=x>y?x-y:x+y;
在这里要计算z的值,首先要判断x>y表达式的值,如果为true,z的值为x-y;否则z的值为x+y。很明显x>y表达式的结果为true,所以z的值为4。
9.引用数据类型
scanner也算是引用数据类型。
例题:
public class Student {
String name; //姓名
int age; //年龄
}
//main方法中调用三个独立方法
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>(); //1.1创建一个可以存储多个同学名字的容器
/*
* 1.存储全班同学信息
*/
addStudent(list);
/*
* 2.打印全班同学每一个人的信息(姓名、年龄)
*/
printStudent(list);
/*
* 3.随机对学生点名,打印学生信息
*/
randomStudent(list);
}
public static void addStudent(ArrayList<Student> list) {
//键盘输入多个同学名字存储到容器中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
//创建学生
Student s = new Student();
System.out.println("存储第"+i+"个学生姓名:");
s.name = sc.next();
System.out.println("存储第"+i+"个学生年龄:");
s.age = sc.nextInt();
//添加学生到集合
list.add(s);
}
}
public static void printStudent (ArrayList<Student> list) {
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println("姓名:"+s.name +",年龄:"+s.age);
}
public static void randomStudent (ArrayList<Student> list) {
//在班级总人数范围内,随机产生一个随机数
int index = new Random().nextInt(list.size());
//在容器(ArrayList集合)中,查找该随机数所对应的同学信息(姓名、年龄)
Student s = list.get(index);
System.out.println("被随机点名的同学:"+s.name + ",年龄:" + s.age);
}
}
10.随机数Random
导入包:import java.util.Random;
创建对象:Random r = new Random();
产生随机数:int num = r.nextInt(10);
解释: 10代表的是一个范围,如果括号写10,产生的随机数就是0-9,括号写20,参数的随机数则是0-19,所以区间范围可变,起始位置想变化的话,就可以采取
int num =r.nextInt(10)+number;来实现。
以下是一个随机验证码实例来巩固随机数:
package text; import java.util.Random; public class twoyanzhengma { public static void main(String[] args) { char [] list= new char [52]; for (int i=0;i<list.length;i++){//循环遍历整个数组 if (i<=25){ list[i]=(char)(97+i);//前26位放小写字母 // System.out.println(list[i]); }else { list[i]=(char)(65+i-26);//后二十六位放大写 // System.out.println(list[i]); } } String result = " ";//设置最后的字符串为空 Random r = new Random(); result = getString(list, result, r); int number = r.nextInt(10);//拼接数字 result=result+number; System.out.println(result); } private static String getString(char[] list, String result, Random r) { for (int n=0;n<4;n++){ int randomIndex = r.nextInt(list.length-1);//以随机的(数组长度-1)为下标随机选值 result = result + list[randomIndex];//拼接五次 } return result; } }
原文地址:https://blog.csdn.net/weixin_51721783/article/details/140642901
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!