int与integer的区别-Java四大特性-修饰符访问的范围-Java与c++区别-JDK和JRE-StringBuilder和buffer
1-1 int与integer的区别-Java四大特性-修饰符访问的范围-Java与c++区别-JDK和JRE-StringBuilder和buffer
这里是easy的java基础面试
下面是总的阅览:
java基础
java集合
JVM
多线程
mysql_数据库
计算机网络
nosql_redis
设计模式
操作系统
消息中间件activeMq
SSM框架面试题
服务中间件Dubbo
1-int与integer的区别
5 点:
- Integer 是int的包装类,而int则是java的一种基本数据类型。
- Integer 变量必须实例化之后才能使用,而int变量不需要。
- Integer 实际上是对象的引用,当new一个Integer时,实际上是生成了一个指针指向对象,而int是直接存储数据值。
- Integer的默认值为null,int则是0 。
- 存储: Integer一般存储在常量池和堆内存。而int存储在方法参数,局部变量----->栈内存中的栈帧的局部变量表里,常量----> 常量池中。
实例:1 Integer and Integer
Integer t1 = new Integer(100);
Integer t2 = new Integer(100);
t1 == t2 // false 因为比较内存地址 (包装类型和string都重写了方法。)
t1.equals(t2) // true 因为比较的是 值
实例: 2 Integer and Int
Integer i = new Integer(100);
int j = 100;
i == j // true 包装类Integer 与基本数据类型 int比较时,java会自动拆箱
实例: 3 Integer and Integer
Integer i = new Integer(100);
Integer j = 100;
i == j // false 内存地址的比较, i在堆内存中,而j保存的是 常量池的地址。
注意: 补充
1-1 java语言八种数据类型
类别 | byte | short | char | int | long | float | double |
---|---|---|---|---|---|---|---|
字节数 | 1 | 2 | 2 | 4 | 8 | 4 | 8 |
范围 | -128~127 | -2^15 ~ 2^15 - 1 | 0 ~ 2^16 - 1 | -2^31 ~ 2^31 - 1 | -2^63 ~ 2^63 - 1 |
2-Java四大特性
- 抽象: 是将一类对象共同特征总结出来构造类的过程。
- 封装: 通常认为封装就是把数据和数据的方法绑定起来,对数据的访问只能通过指定的接口。
- 继承: 从已有类得到继承信息创建新类的过程。
- 多态: 指允许不同子类型对象对同一消息做出不同的响应。
-
多态的实现分为两种: 方法重载 和 方法重写。
重写: 方法名,参数,返回值不变。
- 不能存在同一个类中
- 子类检查异常类型要小于父类
- 子类方法访问修饰符大于父类
重载:方法名不变,返回值 参数(类型,个数)变
- 同一个类中 或者有继承关系的类中。
2-1-继承的好处和坏处
好处:
- 子类能自动继承父类接口
- 创建子类的对象时,无需创建父类的对象。
坏处:
- 破坏封装性,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性。
- 支持扩展,但是往往是以增加系统结构的复杂度为代价。
- 不支持动态扩展。在运行时,子类无法选择不同的父类。
- 子类不能改变父类的接口。
2-2-Orivide覆盖private / static方法?
不行,static方法不能覆盖, 因为方法覆盖是基于运行时动态绑定的,而static 方法是编译时静态绑定的,并且static方法与类的任何实例无关。
private 不能是因为private 修饰的变量 或者方法只能在当前类使用,子类不能访问。
3-修饰符访问的范围
范围 | 所在类 | 同一包内其他类 | 其他包子类 | 其他包内非子类 |
---|---|---|---|---|
private | 可 | 不可 | 不可 | 不可 |
default | 可 | 可 | 不可 | 不可 |
protected | 可 | 可 | 可 | 不可 |
public | 可 | 可 | 可 | 可 |
4-Java与c++区别
- 都是面对对象的语言,都支持封装,继承,多态
- Java不提供指针来直接访问内存,而是通过引用,程序内存更加安全。
- Java的类都是单继承的,c++支持多继承,但是Java的接口支持多继承。
- Java有自动内存管理机制,不需要程序员手动释放无用内存。因为有JVM。
5-JDK和JRE
JDK: 是Java development kit, 他是功能齐全的Java SDK, 它拥有JRE的一切,还有编译器javac 和工具javadoc jdb。它能创建和编译程序。
JRE: 是java运行时环境,他是运行已编译java程序所需的所有内容的集合。包括JVM, Java类库,Java命令和其他一些基础组件,但是他不能创建程序。
JRE内部是通过 JIT编译器完成第一次编译后,会把class文件变为 机器码,把字节码所在机器码保存下来,下次直接使用。
字节码和不同os 中的JVM实现是Java语言 “一次编译,随时可以运行” 的关键。
6-Java创建对象的四种方式
使用构造器(2种) : 使用new 关键字,newInstance() + 无构造器(clone 反序列化)
7-String_StringBuffer_StringBuilder
7-1-区别:
都是final修饰的类,不允许被继承
String长度是不可变的, stringbuffer 和 builder可变 append重新分配空间
Stringbuffer 线程安全,StringBuilder 不安全,但是性能高。
7-2-为什么string不可变?
final修饰的类
如果可变其hashcode不一致,但都是在常量池中
7-3-String重写hashcode和equals?
- 重写equals,必重写hashcode。
- 如果重写equals,不重写hashcode:: 在hashset中先存入 值为1的对象x1, 存在一个x2 值和x1一样,此时如果重写equals,不重写hashcode,此时x2 放入hashset中时,遍历链表,发现hashcode不一样,此时x2存入hashset,发生set集合出现两个一样的数据。
下一篇:
1-2 map和list和set-ThreadLocal-finally-finalize
本文地址:https://blog.csdn.net/qq_41773026/article/details/109561432