07-数组和字符串

(1)今天做了什么:
科一今天没怎么刷题,主要是把错题又刷了一遍,大概30多道,基本都能选对了。做了两套模拟,都是九十多分,不算高但稳。已经约了后天的考试,明后天就每天做一套注意题型就行。Java方面今天主要看了数组和字符串。数组这块,Java的数组和C++有些区别。C++里数组名本质是指针,可以退化成指针操作,但Java的数组是对象,有length属性可以直接获取长度,不用像C++那样sizeof(arr)或sizeof(arr[0])去算。声明方式也不太一样,Java是int[] arr = new int[10]; C++是int arr[10]; 或者new int[10]但得手动delete。感觉Java的数组用起来更方便,不用管内存释放。

字符串这块区别更大。C++里string是类,也可以用char数组,但Java里String是对象,而且有字符串常量池的概念。用字面量创建String str="hello"和用new String("hello")创建,前面会放到常量里复用,后面会在堆里新建对象,这个之前C++没有遇到过的概念。还有String是不可变的,每次拼接都会生成新对象,这点跟C++的string可以直接修改不太一样,拼接多了得用StringBuilder。

(2)明天准备做什么:
科一方面,明天只做一套模拟保持熟练度,再看看交警手势的图,后面考试就不慌了。Java方面,明天准备看看面向对象的东西,类、对象、构造方法这些,C++里也有类,但Java的构造方法写法不太一样,没有初始化列表,想看看具体怎么用。还有继承和接口也想了解一下,C++是多继承,Java是单继承+多接口。

(3)遇到的问题,如何解决:
科一今天问题不大,模拟题做起来比前几天顺多了。Java方面今天遇到两个问题。第一个是数组越界的问题,C++里越界访问可能不会马上报错,能访问到数据,但Java会直接抛出ArrayIndexOutOfBoundsException,运行时报错很明确,这个问题一开始不太习惯,因为C++即使写越界了编译也能过。解决方法就是写循环的时候把length属性带上,确保索引在0到length-1范围内。第二个问题是字符串比较,一开始用去比较两个String内容,发现明明内容一样但返回false,后来搜索,问了AI才知道比较的是引用地址,比较内容要用equals()方法。这个在C++里string可以直接用==比较内容,Java里要区分。