Java 总结

在这里插入图片描述

一,Java 基础

  1. JDK 和 JRE 的区别?

答:JDK:Java Development Kit 的简称,Java 开发工具包,提供了Java的开发环境和运行环境。
JRE: Java Runtime Environment 的简称,Java 运行环境,为Java的运行环境提供了所需环境。

JRE : JVM(虚拟机)+类库
(JRE包括虚拟机JVM和Java程序所需要的核心类库等)
JDK:JRE+JAVA的开发工具
(安装了JDK就不用单独安装JRE了)
简单而言:使用JDK开发完成的Java程序,交给JRE运行

  1. == 和 equals 的区别是什么?

答:
== :
(1)基本数据类型:比较的是值
(基本数据类型有byte,short,char,int,long,float,double,boolean)
(2)引用数据类型: 比较的是堆内存地址,他们在内存中存放地址
(引用数据类型只有三种:类class,接口interface,数组)
注意:如果是同一个new出来的对象(在堆内存中是一个区域),比较的结果为true,否则为false,因为每new一次,都会重新开辟堆内存空间

equals:
不用于基本数据类型比较,继承于Object 这个超类,只有引用数据类型才有equals方法。默认情况下比较的堆内存地址值,一般在一些类中(String,Integer,Data)该方法被重写,比较对象的成员变量值是否相同。

在这里插入图片描述

注意:栈内存里面存放基本类型的变量和对象的引用变量,堆内存里面存放new创建的对象和数组

  1. 两个对象的hashCode()相同,则equals()也一定为true,对吗?

答:不一定,反过来equals为true时,hashCode也不一定相同。类的hashCode方法和equals方法都可以重写,返回的值完全在于自己定义。hashCode()返回该对象的哈希码值;equals()返回两个对象是否相等。

 关于hashCode和equals的方法有一些常规协定:
 (1)两个对象用equals()比较返回true,那么两个对象的hashCode()方法必须返回相同的结果。
 (2)两个对象用equals()比较返回false,不要求hashCode()方法也一定返回不同的值,但是最好返回不同值,以提高哈希表性能。
 (3)重写equals()方法,必须重写hashCode()方法,以保证equals方法相等时两个对象HashCode返回相同的值。
  1. final在Java中有什么作用?

答:final作为Java中的关键字可以用于三个地方。用于修饰类,类属性和类方法。
特征:凡是引用final关键字的地方皆不可修改!

(1)修饰类:表示该类不能被继承;
(2)修饰方法:表示方法不能被重写;
(3)修饰变量:表示变量只能一次赋值以后不能被修改(常量).

  1. Java中Math.round(-1.5)等于多少?

答:

1)小数点后第一位=5
正数:Math.round(11.5)=12
负数:Math.round(-11.5)=-112)小数点后第一位<5
正数:Math.round(11.46)=11
负数:Math.round(-11.46)=-113)小数点后第一位>5
正数:Math.round(11.68)=12
负数:Math.round(-11.68= -12

总结:大于5全加,等于5正数加,小于5全不加

  1. String 属于基础的数据类型嘛?

答:不是,Java中有8种基础数据类型:byte,short,char,int,long,float,double,boolean.可见Java种的基本数据类型并没有String类型。

String 表示的是字符串,Java中将字符串作为对象处理,而不是基本数据类型。在基本数据类型中,与String比较相似的是字符类型(char),该类型变量只能表示一个字符长度,如‘a’。为char类型赋值要使用单引号,为String类型对象赋值要使用双引号。

7. java 中操作字符串都有哪些类?它们之间有什么区别?

答:有String, StringBuffer(字符串串缓冲区),StringBuilder

StringBuffer 线程安全,同步,效率低
StringBuilder 线程不安全,不同步,效率高

String :final 修饰,String类的方法都是返回new String,即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新对象。

StringBuffer:对字符串的操作的方法都加了synchronized,保证线程安全。

StringBuilder:不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder 对象,调用StringBuilder对象的append,replace,delete等方法修改字符串。

synchronized是Java提供的一个并发控制的关键字。主要有两种用法,分别是同步方法和同步代码块,也就是说,synchronized既可以修饰方法也可以修饰代码块。被synchronized修饰的代码块及方法,在同意时间,只能被单个线程访问。

(线程安全:是指你的代码所在的进程中有多个线程同时运行,而这些线程可能会同时运行这段代码,如果每次运行的代码结果和单线程运行的结果是一样的,而且其他变量的值和预期的也是一样的,那么就是线程安全的。

线程不安全:是不提供代码数据访问保护,可能出现多个线程先后访问更改数据造成所得的数据是脏数据。为了避免这种情况,一般采用锁机制

线程安全出现的根本原因:

  1. 存在两个或者两个以上的线程对象共享一个资源
  2. 存在竞争的线程不安全,不存在竞争的线程就是安全的)

添加:

StringBuffer append(String s)//将参数指定的字符串追加到数据容器的末尾
StringBuffer insert(int offset,String str)//将参数中指定的字符串插入到指定的下标位置

删除:

StringBuffer delete(int start,int end)//根据开始和结束下标删除字符串缓冲区中一段内容
StringBuffer deleteCharAt(int index)//删除指定下标对应的字符

修改:

StringBuffer replace(int start,int end,String str)//根据开始结束下标获取一段内容替换成str的内容
void setCharAt(int index,char ch)//根据指定下标替换指定字符

获取:

String substring(int start)
String substring(int start,int end)
int lastIndexOf(String str)

反转:

StringBuffer reverse()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值