博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中常被忽略的几个问题
阅读量:4116 次
发布时间:2019-05-25

本文共 1140 字,大约阅读时间需要 3 分钟。

下面是自己根据自己归纳的,仅供参考,如果想看详细的请点击超级链接:

1、"=="和equals方法究竟有什么区别?

== 操作符是专门来比较变量的内存地址是否相等而不是对象本身,而equals是比较对象的内容。不过要注意的是,如果你要看清楚该类的equals方法底层是否也用了==操作符,不要想当然。

 

2、final关键字

final关键字,都知道如果修饰变量,该变量不能被修改,也就是不能改变,但是由于对象型变量的本质是"引用",使得"不变"也有了两种含义:引用本身的不变,和引用指向的对象不变。

例子:

引用本身的不变:

  final StringBuffer a=new StringBuffer("immutable");

  final StringBuffer b=new StringBuffer("not immutable");

  a=b;//编译期错误

引用指向的对象不变:

  final StringBuffer a=new StringBuffer("immutable");

  a.append(" broken!");//编译通过

可见,final只对引用的"值"有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的"值"相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。

** final只对引用变量的内存地址有约束力,对其对象内容的变化不具有约束力,这点类似于==操作符 **

 

3、 对于String s = "Hello World!"的理解

这个语句生命的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向“Hello World!” 这个String类型的对象

** 我们只是声明了一个只能指向String对象的引用变量所以,如果在刚才那句语句后面,如果再运行一句:String string = s;我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。

 

4、string到底变了没有

没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。请看下列代码:

  String s = "Hello";

  s = s + " world!";

string的内容并没有改变,而是在内存中重新开辟了一个位置存放Hello World然后将s指向新的内容,所以不是内容变化了,而是s不在指向原来的那个对象了,而是指向了另一个String对象。

 

转载地址:http://nsupi.baihongyu.com/

你可能感兴趣的文章
MFC矩阵运算
查看>>
ubuntu 安装mysql
查看>>
c# 计算器
查看>>
C# 简单的矩阵运算
查看>>
gcc 常用选项详解
查看>>
c++输出文件流ofstream用法详解
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>