文章目录
java数据类型
1、基本数据类型定义的变量所占内存字节数的问题
答:java数据类型分为基本数据类型和引用类型,其中基本数据类型包括数值型,字符型(char),布尔型(boolean),数值型包括整数类型(byte,short,int,long),浮点类型(float,double);引用类型包括类,接口,数组;
Boolean – false true/false
char \u0000’ 2byte ‘\u0000’~’\uffff’
short 0 1byte -127~128
short 0 2byte -32768~32768
int 0 4byte -2^31 ~ 2 ^31-1
long 0L 8byte -2^63 ~ 2 ^63-1
float 0f 4byte
double 0d 8byte
java中的Boolean变量取值只能是true和false。整数和true或者false不能等价即不能和其他类型进行转换。在java当中char类型占两个字节,是因为java采用的不是ASCLL码系统级编码,而是采用Unicode字符编码。
java中不能使用未初始化的局部变量。
2、谈谈对java跨平台性的理解
答:所有的.java源文件经过编译形成一个字节码文件,而后在计算机上执行,但是解释程序的计算机不是一台真正意义上的计算机,而是一台由软件和硬件模拟出来的计算机——java虚拟机。java中的所有程序都是在JVM上运行的。JVM读取并处理经过编译的与平台无关的字节码文件。java解释器负责将java虚拟机的代码在特定的平台上运行。
运算符语句
主要有:
- 算术运算符:+ - * / % ++ –
- 赋值运算符:=复合符号运算符(+= -= *= /=)、
- 逻辑运算符:&& || !
- 按位运算符:| & ^ ~ >> >>> <<
- 关系运算符:> < >= <= != ==
优先级: - [] . () 方法调用,属性获取
- ! ~ ++ – 一元运算符
- / % * 乘除取模
- -. + 加减
- << >> >>> 位运算符
- < > <= >=instanceof 大于小于
- == != 等于不等于
- & 按位与
- ^ 按位异或
- | 按位或
- && 短路与
- || 短路或
- ? 条件运算符
- = += -= *= /=…… 混合赋值运算符
1、如何更快实现2的3次方
答:采取位运算符,因为CPU计算本质是通过二进制,位运算符的作用在于对整数数值的二进制表示进行运算,所以最快。
2>>2
2、二分(折半)查找的优化问题
答:涉及运算符的优化/2变为>>1
int mid=left+(right-left+1)/2
3、java异常中try块中return;语句和System.exit(0);语句之间是有区别的。
答:return语句用来从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续执行。如果在main()方法中执行return语句,则使程序执行返回到java运行系统,因为java运行系统调用了main()方法。要想从程序的任意地方直接一步到位的退出程序,而不是返回到调用该方法的语句处,可以使用System.exit(0)方法
java中语句三种结构:顺序分支循环
4、选择题:short a=0;a+=1;a=a+1;哪个会发生编译报错
答:a=a+1会报错,因为a定义成short类型,而1是int类型,a与1做运算最终结果是int,无法直接将一个int型数据赋值给short型。
而a+=1,是先判断1是否在short类型数据的范围内,如果没有超出范围则直接赋值给a
数组
1、字符串替换问题
将字符串中每一个‘a’字符替换3个‘#’字符。要求:时间复杂度O(n)。备注:数组操作
public static String replace(String str){
if(str==null){
return null;
}
StringBuffer str1=new StringBuffer(str);
StringBuffer newstr=new StringBuffer();
for(int i=0;i<str1.length();i++){
if(str1.charAt(i)=='a'){
newstr.append('#');
}else {
newstr.append(str1.charAt(i));
}
}
return newstr.toString();
}
2、二分(折半)查找代码实现问题
public static int Brinary(int []arr,int i){
if(arr==null){`在这里插入代码片`
return -1;
}
int left=0,right=arr.length-1;
int mid=0;
while (left<=right){
mid=left+((right-left+1)>>1);
if(arr[mid]>i){
right=mid-1;
}else if(arr[mid]<i){
left=mid;
}else
break;
}
return mid;
}
注意>>运算符处需要加大括号
3、整型数组中,通过代码实现奇数在前偶数在后的问题。要求:时间复杂度O(n),空间复杂度O(1)
public static void paixu(int []arr){
int left=0;
int right=arr.length-1;
while (left<right){
if(arr[left]%2==0){
int temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
right--;
}else{
left++;
}
}
System.out.println(arr.toString());
}
既然空间复杂度不变,就不能用最容易思考的方法复制一个数组,多定义一个right用它来换空间。
4、二维数组中查找值问题。注意:二维数组从上到下依次递增有序,从左到右依次递增有序。考虑算法效率。
这个题是牛客网的第一道题,在一开始做的时候也有点蒙。但是仔细观察发现这样的二维数组是有规律的:对角线左上半部分是小于对角线上的值,对角线下半部分的值大于对角线线上的值;所以只要控制i,j就可以进行查找
public static Boolean find(int[][]arr,int target){
int i=arr.length-1;
int j=0;
while (i>=0&&j<arr.length){
if(target==arr[i][j]){
return true;
}else if(target>arr[i][j]){
j++;
}else if(target<arr[i][j]){
i--;
}
}
return false;
}
注意二维数组行和列的表达
本文深入解析Java数据类型、运算符、语句及数组操作,涵盖基本数据类型内存占用、跨平台性理解、位运算优化、异常处理区别、数组操作技巧等关键知识点。
171万+

被折叠的 条评论
为什么被折叠?



