目录
- 第一个知识点是明确==比较对象的时候,比较的是两个对象的地址
- String方法返回的对象是new String()方式返回的
- 第三个就是字面字符串和语法糖方式的对象会存放在常量池
- JAVA方法有传值操作和传址操作,传值操作会不会改变原来数据的
- 传址操作分为两种,一种是改变对象的引用地址。一种是改变对象的内存内容
- 改变对象的地址并不会改变对象的内容,比如String类型,是不可变的,所以str=test ok,只是将str的引用指向了test ok 常量池中的地址,其传入的对象的值并不会改变
- 首先我们最大b=表达式?a?b,如果表达式为true,则b=a,反之b=b
- 其次==的优先级大于? 则表达式变为b=true?false:(true==true)?false:true
- b=true?false:true?false:true->b=true?false:fa
- 因为在对象创建的时候,利用了匿名内部类重写了equals,其按照最近原则,会优先调用其覆写的方法
JDK和JRE和JVM
- 正常的有int/char/String/enum
- 但是小于4个字节的基本数据在内存中按4个字节存储 所以short byte也是
- 编译失败,因为方法内不能定义静态变量
编程题
import java.lang.*; import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { String str = sc.nextLine(); char[] arr = str.toCharArray(); String str1 = ""; for (int i = 0; i < arr.length; i++) { if (!str1.contains("" + arr[i])) { str1 += arr[i]; } } System.out.println(str1); } } }
- 首先知道怎么将字符串转换为字符数组
- 知道字符串的contains所运用的数据必须是字符串类型
import java.util.*; public class Solution { public void merge(int A[], int m, int B[], int n) { //用双指针,如果后台没有把nums1数组扩容怎么办呢 //nums1= Arrays.copyOf(nums1,m+n); int i,j; int k=0; int []arr=new int[m+n]; for (i=0,j=0;i<m&&j<n;){ if (A[i]<B[j]){ arr[k]=A[i]; i++; }else { arr[k]=B[j]; j++; } k++; } while (i<m){ arr[k]=A[i]; k++; i++; } while (j<n){ arr[k]=B[j]; k++; j++; } for (int l = 0; l < m+n; l++) { A[l]=arr[l]; } } }
- 双指针思想,一个指针在A,一个指针在B,每次将两个指针中较小的值写入,然后指针后移,直到其中一个指针到达数组的尾部