java和C++的区别
- java不支持指针、多继承、运算符重载、全局变量、宏定义等;
- java是混合性语言,先编译成java字节码,再由JVM边解释翻译边执行,不直接运行在计算机硬件上,因此移植性好;C++是编译性语言,先编译成机器码再解释成指令;
- java内容管理对象只再堆上分配内存,其内存释放由JVM进行垃圾自动回收。
基本概念和运算符
JDK、JRE、JVM的定义和关系?
- JDK是核心工具包,包含JVM,核心类库,开发工具(javac,jdb那些)
- JRE是运行环境,包含JVM,核心类库,运行工具(java)
- JVM是虚拟机,JDK包含JRE,JRE包含JVM。
代码中0开头是八进制如017,0b开头是二进制,0x开头是十六进制。
64A,97a
&&和&的区别是前者有短路效果,即左边已经获得结果,右边将不参与。&&有假即假,||有真即真。
原码、反码和补码的关系?
-
反码:正数不变,负数将原码符号位不变,其他位取反。
- 目的是解决原码负数加正数的问题。
-
补码:正数不变,负数将反码加一。
- 目的是解决反码负数加正数后超过0时的问题。
-
一个字节的范围是-128到127,一般计算机存储和计算都以用补码形式进行计算。
数组与方法
Arrays.sort(arr)时 arr 的数据类型可以是基本数据类型,但 Arrays.sort(arr,comparator)时必须使用引用类型(类,接口,数组存放的是对象的内存地址)。
因此对于普通int数组逆序使用sort方法时,可以先转为Integer
public static void arraysort(){
int[] abb = new int[5];
Scanner sc = new Scanner(System.in);
for (int i=0;i<abb.length;i++){
abb[i]=sc.nextInt();
}
//使用流把int数组转为integer数组
// Integer[] arr = IntStream.of(abb)
// .boxed()
// .toArray(Integer[]::new);
//传统遍历
Integer []arr=new Integer[abb.length];
for (int i=0;i<arr.length;i++){
arr[i]= abb[i];
}
System.out.println(Arrays.toString(arr));
Arrays.sort(arr,(a,b)->{return a-b;});
System.out.println(Arrays.toString(arr));
Arrays.sort(arr,(a,b)->{return b-a;});
System.out.println(Arrays.toString(arr));
Arrays.sort(arr, Collections.reverseOrder());
System.out.println(Arrays.toString(arr));
}
Java最基本内存分配
- 栈:方法运行的内存。
- 堆:new出来的。将堆内开辟的地址赋值给栈中的变量
//基本数据类型,数据值存放在自己的栈空间中。
int a=10;
int b=a;
//引用数据类型,数据值存放在堆空间中。自己栈空间存放的是地址值
int[] arr1={1,2,3};
int[] arr2=arr1;//操作同一数组
方法重载:方法名相同,参数个数、类型、顺序(前提类型不同,且不好)不同。
将数字字符转为数字
for (int i=0;i<s.length();i++){
arr[i]=s.charAt(i)-'0';
}