Java 基础知识复习

文章详细介绍了Java的基本数据类型及其内存占用,包括包装类型和对象内存计算。提到了Object类的11种方法,以及数组与链表的区别,强调了对象相等判断的==与equals的区别。此外,讨论了快速排序算法的工作原理和基准值选取。还涵盖了String类的常用方法以及重载和重写的概念。
摘要由CSDN通过智能技术生成

1.基本数据类型及数据容量?

1、Java基本数据类型包括4种整型,2种浮点数类型,1种表示Unicode编码字符单元的字符类型char和1种表示真值的boolean类型。

2、其中占用内存8位的是byte和boolean,16位的是short和char,32位的是int和float,64位的是double和long。

3、每种基本类型都有一个包装类型来把它包装在对象中,如int的包装类型是Integer,char的包装类型是Character。

4、包装之后,对于对象占用内存的计算方法和普通对象的大小计算完全一样,总共内存占用包含3各部分:(1)一个对象有对象头(32位机对象头占用8字节,64位机占用16字节)。(2)对象数据占用大小(Integer对象内部就是int,占用4字节)。(3)padding(需要8字节对齐,总占用没达到8字节倍数的要做填充,如Integer需要填充4字节,Integer在32位机中总共占用16字节,在64位机中总共占用24字节)。

注意:关于boolean占几个字节,众说纷纭,虽然boolean表现出非0即1的“位”特性,但是存储空间的基本计量单位是字节,不是位。所以boolean至少占1个字节。
JVM规范中,boolean变量当作int处理,也就是4字节;而boolean数组当做byte数组处理,即boolean类型的数组里面的每一个元素占1个字节。


2.Object类11种方法

(31条消息) Object类11种方法_object方法_慢慢亦漫漫~的博客-CSDN博客

 3.数组与链表的区别

数组是具有相同的数据类型且按一定次序排序的一组变量的集合体,数组在内存中的地址是连续的(链表内存地址是散列、不连续的)。数组是一种引用数据类型,数组元素类似对象的成员变量。链表通过指针连接元素,分为单向链表、双向链表和循环链表。数组静态分配内存,链表动态分配内存。数组利用下标定位,时间复杂度O(1),链表定位元素时间复杂度O(n);数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。

4.判断对象是否相等

“==”比较的是地址,被重写过的equals方法比较的是内容

(21条消息) Java基础系列(二) 对象相等判断_java判断两个对象是否相等_broadview_java的博客-CSDN博客

(21条消息) 两个对象相等(==、equals、hashCode)详解_364.99°的博客-CSDN博客

 5.快排的原理?怎么取中间值

1)从待排序区间选择一个数,作为基准值(pivot);
2)Partition:为划分函数,遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边;
3)采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度 == 0,代表没有数据。
原文链接:(20条消息) 常见排序算法基本原理及实现(快排,归并,堆排,直接插入.....)_排序算法原理_Ischanged的博客-CSDN博客

(22条消息) 排序算法——快速排序(Quicksort)基准值的三种选取和优化方法_快速排序基准值的选择_zou_albert的博客-CSDN博客 

6.equals如何判断两个对象相同 

1、类未复写equals方法,则使用equals方法比较两个对象时,相当于==比较,即两个对象的地址是否相等。地址相等,返回true,地址不相等,返回false。

2、类复写equals方法,比较两个对象时,则走复写之后的判断方式。通常,我们会将equals复写成:当两个对象内容相同时,则equals返回true,内容不同时,返回false。

如果我们需要通过比较属性来判断引用的对象是否相等,就需要重写equals方法。

equals方法是Object类中定义的方法,Object类是所有类的父类,因此我们可以重写equals方法。

equals方法的判断流程一般是:

判断是否是引用同一个对象,如果是,返回true, 否则继续
判断传入的引用是否为NULL, 如果是,返回false
判断传入的引用的类型和调用equals方法的对象类型是否一致,如果不一致,返回false
将传入的对象强转
比较相关属性的值,返回结果

(20条消息) Java基础- 对象相等判断_java对象比较是否相等_骑牛小道士的博客-CSDN博客

7.重载(Overload)和重写(Override)的区别? 

写文章-CSDN创作中心浅谈重载和重写_重写与重载谁更好实现多态发展_葫芦葫芦葫芦的博客-CSDN博客写文章-CSDN创作中心

答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问(权限更大),不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

8.String 类的常用方法都有那些?

(一)String获取功能

1)length()方法  获取字符串长度

2)charAt(int index):获取指定索引处的字符

3)indexOf(String str):获取str在字符串对象中第一次出现的索引
4)substring(int start):从start开始截取字符串
5)String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end
(二)String判断功能
1)equals(Object obj):比较字符串的内容是否相同
2)equalsIgnoreCase(String anotherString):比较字符串的内容是否相同,忽略大小写
3)startsWith(String prefix):判断字符串对象是否以指定的字符开头(区分大小写)
4)startsWith(String prefix,int toffset):判断字符串对象是否以指定的字符开头,参数toffset为指定从哪个下标开始
5)endsWith(String str):判断字符串对象是否以指定的字符结尾
6)isEmpty():判断指定字符串是否为空
6)compareTo(String anotherString):比较字符串的大小,前者大返回整数,后者大返回负数,相等返回0

(三)String类中的转化方法:
1)toCharArray():把字符串转换为字符数组
2)toLowerCase():把字符串转换为小写字符串
3)toUpperCase():把字符串转换为大写字符串
(四)其他常用方法
1)trim():去除字符串两端空格
2)split():去除字符串中指定的的字符,然后返回一个新的字符串
3)subSequence(int beginIndex,int endIndex ):截取字符串中指定位置的字符组成一个新的字符串
4)replace(char oldChar, char newChar):将指定字符替换成另一个指定的字符
5)replaceAll(String regex,String replasement):用新的内容替换全部旧内容
6)replaceFirst(String regex,String replacement):替换首个满足条件的内容
7)lastIndexOf(String str):返回指定字符出现的最后一次的下标
8)contains(CharSequence s):查看字符串中是都含有指定字符
9)concat(String str):在原有的字符串的基础上加上指定字符串

(20条消息) String类的常用方法_string常用方法有哪些_my name is wang的博客-CSDN博客

9.String 不可变的真正原因是:

  1. 保存字符串的数组被 final 修饰且为私有的,并且String 类没有提供/暴露修改这个字符串的方法。
  2. String 类被 final 修饰导致其不能被继承,进而避免了子类破坏 String 不可变。

10.String str="i"与 String str=new String(“i”)一样吗 

不一样,使用String str=“i”,java虚拟机会把它分配到常量池中,而 String str=new String(“i”)创建了一个对象,会被分到堆内存中。

(20条消息) String str="i"与 String str=new String(“i”)一样吗?_"string str=i+\"\";"_weixin_38263179的博客-CSDN博客

(20条消息) String str=“i”与 String str=new String(“i”)一样吗?_string str =_Java鱼仔的博客-CSDN博客11. new String(“ab“) 和 new String(“a“) + new String(“b“) 分别会创建几个对象? 

2,6 

s(20条消息) 面试题:new String(“ab“) 和 new String(“a“) + new String(“b“) 分别会创建几个对象?_字符串相加创建了几个对象面试题_zikLDream的博客-CSDN

12.一个.java文件中是否可以有多个类 

答案:可以有多个类,但最多只能有一个被public修饰的class。

且若这个.java文件中有一个public类型的class,则这个class名需与.java文件名一致。

说到这里,有人可能有疑问:

明明我看到java是有四种访问权限(public,default(只允许本包内使用),private以及protected)的呀,为什么上面没有被private和protected修饰的类呢?

private和protected只会用来修饰类的属性,方法和内部类。你想如果外部类是private的,其他任何的类都无法访问这个类,那么这个类就没有任何意义了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值