📄 java2.txt
字号:
sd 0804 Javaday2 2008年6月11日1.如果A来性的取值范围是B的取值范围的完全子集,这种转换可以直接进行,否则要进行强制类型转换
2.出了boolean 类型的其他7种类型都是数值类型变量,是可以相互转换的
java里char是2个字节,16位的unicode编码,char与short的区别就是char无符号(0~65535),short有符号(-32768~32767)
unicode兼容ASC码,0~127 之间是相同的
public class byte_int {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 0x2aff;
byte b=(byte)a;
System.out.println(b);
}
}
输出结果:
-1
a在内存中存储的是 0010 1010 1111 1111 ,强制类型转换成byte 后,就会保留最低位,所以后8位为 1111 1111 ,结果就为-1
2 a f f
double d = 3.14;
int a = (int)d;
这种强制类型转换后的结果a就为3
char a='0'; char b='/u0000'; 不等
int a=0; char b='0'; 不等
int a=0; char b='/u0000'; 相等
int a=3+'5'; char b='8'; 相等
int a='3'+'5'; char b='8'; 不等
int a=3+'5'; int b=8; 不等
***如下三种转换会造成数据丢失:
int -> float
long -> float
long -> double
\'
\"
\\
\n换行
\t制表符
\b
\0 unicode码中的空字符,跟'/u0000'相同,不是c++中的表示字符串结束
String 在Java中是个类类型,类的实例叫做这个类的对象
String s1="hello";
String s2=new String("hello"); 使用生成对象的方式直接new一个字符串变量
找到指定下标位置上的字符
String s1="hello";
s1.charAt(0);
字符串连接
s1.concat(String str);
contains("he") 比较字符串中是否包含“he“,如果包含就返回真
String s1 = "hello";
String s2 = "hello";
if(s1==s2) 这种比较只是比较这两个字符串的地址是否相等
euqals,比较两个字符串
if(s1.equals(s2)) 这种才是比较两个字符串内容是否相等,相等就返回真
equalsIgnorecase()忽略调大小写的比较
indexof()指定的字符串查询第一次出现指定内容的部分的地方
String s="hello";
int a=s.indexof("ll");
在Java中比较两个实型值没有意义,因为输出值是近似存储,所以不要用"=="比较
-------------------------------------------------------------------------------------------------------
public class DoubleTest{
public static void main(String[] args){
double a=2.0, b=1.1, c=0.9;
System.out.println(a-b);
if(a-b==c){
System.out.println("ok");
}else{
System.out.println("不ok");
}
}
}
输出结果:
0.8999999999999999
不ok
应该用 下面的方式来比较
public class DoubleTest{
public static void main(String[] args){
double a=2.0, b=1.1, c=0.9;
double d=a-b;
System.out.println(a-b);
if(Math.abs(d-c)<1e-6){
System.out.println("ok");
}else{
System.out.println("不ok");
}
}
}
输出结果:
0.8999999999999999
ok
-------------------------------------------------------------------------------------------------------
Math.sqrt(b)求b的平方根
Math.Pow(a,b)求a的b次方
Math.sin()
Math,cos()
Math.tan()
Math.random() 产成一个0~1之间的随机double值
(int)(Math.random()*100) 0~100 之间的随机整数
Java数据类型:
8种基本数据类型
类类型(对象类型)
垃圾回收机制:JVM中有专门的线程来处理垃圾回收工作,在JVM中是自动进行的,程序员可以不用主动回收垃圾
System.g(c):适用于大量的数据释放的时候,这时候再调用System.g(c)让JVM去回收垃圾
所有符合赋值运算符都会自动把符号右边的类型转换成与符号左边相同的类型
= *= /= %= += -= <<= >>= >>>= &= ^= |=
-------------------------------------------------------------------------------------------------------
public class OperatorTest{
public static void main(String[] args){
byte b=5;
b += 2; //会把符号右边的数字自动转换成左边的变量类型
//b = b+2; //b是byte型,而2是int型,两种不同类型相加会报错,要进行强制类型转换
}
}
-------------------------------------------------------------------------------------------------------
> >= < <= == !=
boolean N N N N Y Y
整形 Y Y Y Y Y Y
实型 Y Y Y Y N N (可以,但是没有意义)
对象 N N N N Y Y (比较地址值)
<< >>移位运算
左移超过32位就是这个 数与10E32的余
按位与
&:都为1时才为1
按位或
|有1就为1
按位亦或
^相同就为1,不相同就为0
按位求反
~
想要b得-8
int a = 8;
int b = ~a+1;
int a = 0x8a3d;
a&0xFF00 前8位保留,后8位全为0
a|0x00FF 前8位保留,后8 为全1
a^0xFF00 (亦或)高8位不变,低8位求反
(a^0xFF00)&0xFF00
逻辑运算:
&& || 是短路计算
下面两个都是不短路计算:
&:逻辑与,如果符号前后是int,就表示位运算,如果前后都是boolean值就表示逻辑运算
|:逻辑或,同上
在C++中因为 boolean 值和int 型通用,所以不能用&和 | 进行逻辑判断,但Java中可以
运算优先级:
1. ( ) [] .
2.单目运算符 ++, --, ! ,~
3. 算术运算符* , / , %
+, -
4. 关系运算符> , >= , < , <=
== , !=
5 逻辑运算符&& , ||
6. 条件运算符?:
7. 赋值运算符=, += , -= , *= , / .....
循环控制:
-------------------------------------------------------------------------------------------------------
public class loop {
public static void main(String[] args) {
double sum = 0.0;
double k = 0.0;
int d = 1;
for(int i=1;i<=50;i++){
k = 1.0/(2*i-1);
sum += d*k;
d = -d;
}
System.out.println(sum);
}
}
-------------------------------------------------------------------------------------------------------
用do..while 循环检查输入是否有效
-------------------------------------------------------------------------------------------------------
import java.util.*;
public class DoWhileLoop {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
String str = null;
do{
System.out.println("请输入姓名:");
str = s.readLine();
}while(str.charAt(0)>='0' && str.charAt(0)<='9');
}
}
-------------------------------------------------------------------------------------------------------
continue 和 break 语句在java中都可以带语句标号表示可以直接跳出某个多层循环,直接跳到循环外
数组
定义数组
int[] a;
实际上定义的是个引用,可以看作是个对象
a = new int[5]; //int[] a = new int[5];
//直接赋初始值 int[] a = new int[]{10,20,30,40}元素个数取决于大括号内的元素个数
//可以直接写成 int[] a = {10,20,30,40}
使用new后,系统才会分配空间给数组a,这个时候再定义数组大小
利用循环给数组每项赋值
for(int i=0; i<a.length; i++){
a[i] = 10*i;
}
数组下标越界异常:超过数组大小的元素赋值
定义二维数组:
int[][] a;
a = new int[3][5];
a[0][3] = ...
a[2][4] = ...
或
a = new[3][];
a[0] = new int[5];
a[1] = new int[3];
a[2] = new int[4];
Java中没有指针操作,所以二维数组可以定义成不同长度
给二维数组赋值:
int[][] a = new int[3][5];
for(int i=o; i<a.length; i++) //length此时的长度是3
for(int j=0; j<a[i].length; i++) //a[i].length长度是5
a[i][j]
二维数组访问时也不能越界
int row = Integer.parseInt("20")将字符串转化成整型
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -