java中的小细节
1)java中的负数用二进制表示是用补码的形式(负数的绝对值取反 加一):例如十进制的-1 正数: 符号位为0;负数: 符号位1 十进制的-1(int类型)用二进制表示:首先-1的绝对值1用二进制表示是: 00000000 00000000 00000000 00000001 取反: 11111111 11111111 11111111 11111110 加1: 11111111 11111111 11111111 11111111 也就是说int类型的-1用二进制表示就是:11111111 11111111 11111111 11111111
2) >>和>>>:前者是位运算表示右移(高位补符号位);后者表示逻辑右移(高位补0);也就是说两者如果是正数右移的话,结果没有什么区别,但是如果是负数的话就有区别了,前者结果还是负,后者就变成正了;
3)&和^这两个位运算符的两个小例子:
例如:int num=new Random().nextInt(100);boolean a=(num&1==1)?true:false;这段代码的意思就是判断随机生成的num整数是不是奇数;
^的例子:int a=1,b=2;两个变量a和b互换位置: a=a^b;b=a^b;a=a^b;也可以这么写:a^=b;b^=a;a^=b;
4)默认值:Java中八种基本数据类型:boolean类型的默认值是:false;其他七种基本类型默认值都是0,只是表示方式不用(char的默认值是‘\u0000’,long的是:0L,float的是:0.0F,double的是:0.0),对象类型的默认值是:null;
5)break,continue,return三个关键字: break 除了在switch语句中使用以外,只是针对for循环的代码块,是结束循环的意思; continue 只是用在for循环的代码块中,是跳出本次循环,继续下一次循环的意思; return 是针对方法的,是返回的意思 ,有返回值就返回返回值,如果没有就跳出方法,结束方法体的运行;
6)冒泡排序和选择排序:
//冒泡排序;
for(int i=1;i<arr.length;i++){//相邻的元素比较, 每次找出最大的数,交换到数组末尾
for(int j=0;j<arr.length;j++){//外层循环表示循环多少轮,内层循环表示每轮相邻的两个元素比较;
if(arr[j]>arr[j+1]){
//交换j和j+1两个位置的元素;
}
}
}
//选择排序:
for(int i=0;i<arr.length-1;i++){//某个元素和剩余的所有元素比较, 每次找出最小的数,交换到数组开头
for(int j=i+1;j<arr.length;j++){//外层控制循环几轮,内层控制每轮循环比较的元素;
if(a[i]>a[j]){
//交换位置;
}
}
}
7)汉罗塔(递归):用java代码表示汉罗塔的过程;
如果要解决一个大问题可以分解成若干个小问题来解决,而小问题的解决跟这个大问题的思路是一样的;类似这样的大问题都可以用递归来解决;递归最重要的是要找到:递归的截止条件,不能无限的递归下去;
public class HanLuoTa{
public static void main(String[] args){
transfer(8,'a','b','c');
}
//把n个盘子,从from柱移动到to柱,借助于temp柱;
public static void transfer(int n,char from,char to,char temp){
if( n == 0) return;//递归的截止条件;
//把n-1个盘子,从from柱移动到temp柱,借助于to柱;
transfer(n-1,from,temp,to);
//把第n个盘子,从from住移动到to柱;
System.out.println(from+"------->"+to);
//把n-1个盘子,从temp柱移动到to柱,借助于from柱;
transfer(n-1,temp,to,from);
}
}
网友评论