1 doGet和doPost的区别
GET只有一个流,参数附加在URL之后,大小个数严格限制且只能是字符串,POST则通过另外的流传递的,不通过URL,所以可以很大,也可以传递二进制,如文件上传.
安全
GET调用URL里显示给SERVER里的数据,在这系统安全上可能带来问题,如用户名密码等.
POST就可以在一定程度上解决此类问题
服务器接收方式
服务器接收GET传递的数据,一旦断电,服务器也不知道是否发送完毕
而POST服务器先接收信息数据的长度,再接收数据
FORM运行方式
当FORM框里面的METHOD为GET时,执行doGet方法
当FORM框里面的METHOD为POST时,执行doPost方法
容量限制
GET方法后面的信息量字节大小不要超过1.3K,而Post则没有限制
2 "=="和equals方法究竟有什么区别?
==操作符专门用来比较变量的值是否相等。比较好理解的一点是:
int a=10;
int b=10;
则a==b将是true。
但不好理解的地方是:
String a=new String("foo");
String b=new String("foo");
则a==b将返回false。
根据前一帖说过,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是 false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。
对象内容的比较,正是equals方法做的事。
看一下Object对象的equals方法是如何实现的:
boolean equals(Object o){
return this==o;
}
Object 对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出, Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。
看一下一个极端的类:
Class Monster{
private String content;
...
boolean equals(Object another){ return true;}
}
我覆盖了equals方法。这个实现会导致无论Monster实例内容如何,它们之间的比较永远返回true。
所以当你是用equals方法判断对象的内容是否相等,请不要想当然。因为可能你认为相等,而这个类的作者不这样认为,而类的equals方法的实现是由他掌握的。如果你需要使用equals方法,或者使用任何基于散列码的集合(HashSet,HashMap,HashTable),请察看一下java doc以确认这个类的equals逻辑是如何实现的。
3 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问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。其实那是徒劳的。
分享到:
相关推荐
以下是我从"学习Java必须弄懂的几个问题"这个主题中提炼出的一些重要知识点: 1. **Java基础语法**:Java是一种面向对象的语言,理解其基本语法结构至关重要。包括数据类型(如整型、浮点型、字符型和布尔型)、...
在开发Web应用时,图片上传是一项常见的功能,但图片在拍摄、查看或传输过程中可能会因为设备设置或软件处理而产生旋转问题。Java作为后端语言,处理这种情况时需要与前端协同工作,确保用户上传的图片能正确显示。...
"很容易弄错的Java面试题"通常涉及那些看似简单实则暗藏陷阱的问题,这些问题能够检验候选人在实际编程中的严谨性和对细节的把握。下面,我们将深入探讨一些经典的Java面试题及其背后的原理。 1. **对象的相等性**...
Java 3D通过抽象化底层的图形硬件细节,让开发者能够专注于场景的逻辑和交互,而不是硬件的兼容性问题。 在实际应用中,Java 3D广泛应用于科学可视化、教育、金融数据表示、医疗教育、地理信息系统(GIS)、计算机...
Java 解决中文乱码问题 Java 中文乱码问题是中国程序员无法避免的话题。乱码的出现是由于中文和英文的编码格式不同,解码也是不一样的。如果中国的程序员不会遇到乱码,那么只有使用汉语编程。Han语编程是怎么回事...
个人从CSDN上整理的关于Java的常见问题都是一些精华贴 不是很多还在整理中 1.if后面的()问题.doc 2.instanceof 详解.doc ...6.每个新手都要搞懂弄明白的.doc 7.数据库的设计总结.doc 8.线程同步.doc 9....
Java初学者在学习过程中会遇到许多基础但重要的问题,理解这些问题有助于深入掌握Java语言。本文将详细讨论其中三个关键知识点。 首先,我们要明确Java中的变量声明。以`String s = "Hello world!";`为例,初学者常...
例如,问题 1 中要求你在 7 天内付费给工人,每天结束时给他们一段金条,只允许你两次把金条弄断。这类问题要求你具备逻辑思维能力和解决问题的能力。 知识点:逻辑推理、问题解决 2. 数学和算法 数学和算法是 ...
最近因为要弄一个网页获取电子称重量的功能,所以去查看了这方面的资料,找了许多人的资料,看了许多。这个对于我来说本来就是新东西,更加不懂。所以这个东西对于新手很适合,里面项目我都测试过了,里面还附带说明...
本书重点介绍了在Java语言的学习过程中所遇到的各种问题,这些问题都是非常基础的,但也是非常重要的,是很多学习Java的人无法从课堂上弄明白的问题。本书按照普通Java教材的顺序循序渐进地回答读者学习过程中经常...
本次项目由于服务器之间需要通信加密,java和c++,自己只懂java...为了以后方便他人,贡献出基础代码,java里面有简单说明,c里面同事弄的就给了代码,懂得c的朋友自己研究哈。其中密钥最好不要弄符号,而且保证16位。
此外,为了确保用户体验,我们还需要处理一些细节问题,例如错误处理(如二维码无法识别、网络连接失败等)、用户权限请求(相机访问权限)以及在下载过程中的进度反馈。在JAVA中,可以使用DownloadManager来管理...
因此,如果你想要比较对象的内容而不是引用,应该使用 `equals()`。 11、重载(Overload)和重写(Override)的区别是什么? 【基础】 重载(Overload)发生在同一个类中,指的是可以有多个方法具有相同的名字,但...
Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。"java作业源代码"这个主题通常涉及到的是初学者在学习Java基础时所完成的一些练习项目,目的是帮助他们理解和掌握Java的基本语法和...
在使用Demo时,要注意捕获可能的异常情况,如网络错误、请求超时等,并做好日志记录,以便于问题排查。 总结来说,"华为语音通知Java版Demo"为开发者提供了一个直观的实践平台,通过学习和运行这个Demo,开发者...
经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点...
Java的很多API都没正式深入去看,所以有些问题直接用API就行的东西,我可能自己造了“轱辘”, 各位有空的话可以将程序再弄得简洁一些,更高效一些。 欢迎板砖,轻点最好;欢迎交流,共同提高。
总的来说,汉诺塔问题的Java实现是学习和掌握递归算法的一个优秀实例,通过理解和编写这样的代码,开发者能够提升解决问题的能力,特别是在处理复杂数据结构和算法设计时。同时,这也是一个很好的练习,有助于提高...
在Java中,由于字符编码问题,直接处理中文文件名可能会导致乱码。为了解决这个问题,我们需要确保在读取、写入文件以及在网络传输过程中正确地处理字符编码。通常使用UTF-8编码,因为它是国际化的标准,并且能很好...