java 中==符号的坑】的更多相关文章

在某技术群看到这样的一个面试题目: 这是一个4年经验的java 从业者的答案. 你的答案是什么呢? 正确的答案是true. 为什么? 其实当使用String a="a"+"b"+1;时,程序会建立一个String缓冲池(String pool):把a放入:当再次使用Stirng b="ab1";程序首先会在这个String缓冲池中寻找相同值的对象;找到了a,然后a,b引用了相同的值的对象. 我们可以查找到很多相关与String pool的资料.…
最近准备换工作,为了少让人家鄙视,就要狠狠地藐视这些面试题目.找了本电子书,发了有好多坑,都是特别简单,但是很少有人做对的题目.面对这样的题目,我却有一种兴奋的感觉,也许是因为一直做着重复的工作没有新鲜感了,偶尔掉坑了还自得其乐来着.好了,言归正传,待我细细说来,欢迎拍砖啊. 1.坑1,关于三目运算符 先看题目:char x = 'x';System.out.println(true?120:x);请问输出结果是什么? 我想大多数人的结果是120,而且还用很蔑视的态度回答,先不用着急,三目运算符…
一 参考博文 java中无符号类型的解决方案 二 java中的无符号数和有符号数 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型. 使用二进制中的最高位表示正负 计算机中一般用补码表示数值:另外,用二进制的最高位表示符号,0表示正数.1表示负数. 无符号和有符号数的范围的区别 无符号数中,所有的位都用于直接表示该值的大小:有符号数中最高位用于表示正负,所以,正值时,该数的最大值就会变小: 无符号数:1111 1111 值:255 有符号数:0111 1111 值:1…
第一个例子: byte b=-100;b在内存中是以补码的形式存贮的:1001 1100 如果执行char c=(char)b;如3楼企鹅先生所说:b要先变为int,这时增加的位全要用b的符号位填充(这就是符号扩展),变为:1111 1111 1111 1111 1111 1111 1001 1100 下步是强制类型转换,只保留了最低的两个字节:1111 1111 1001 1100. 如果执行char c=(char)(b&0xff),同样b要转为int ,同时符号位扩展:1111 1111 …
一.思考题 以下代码可能有什么错误?为什么? import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("heihaozi", 1); Integer i = map != null ? map.get…
基本数据类型 浮点数存在误差 浮点数有一个需要特别注意的点就是浮点数是有误差的,比如以下这段代码你觉得输出的什么结果: public class Demo { public static void main(String[] args) { System.out.println(0.1+0.2 == 0.3);//输出false } } 这段代码输出值是false,之所以是这个结果那是因为浮点数是存在误差的,也就yi是说0.1在计算机中存储时不是精确的0.1,而有可能是0.1000000001,…
观察下面代码,输出结果是什么? public static void main(String[] args) { Integer p = 10000; Integer q = 10000; System.out.println(p == q); System.out.println(p.equals(q)); } 运行一次,答案与预想的完全不一样.在比较数字的时候,一定要用euqals,不能用==c 查看Integer的jdk源码,发现如下片段: /** * Cache to support t…
概述 Java是门极简风格的语言,比其它语言相比,它故意保持较少的特性,不仅在有些不常见的情况下会出些奇奇怪怪的错误,即使很一般的情况下也有可能让人栽根头.如果你习惯了别的语言,你读Java 的代码很容易搞错一些概念. 变量要么是引用 ,要么是基础类型 这是对的,变量不是对象.也就是说在下面这个例子里,s不是个对象,也不是字符串,它只是一个字符串的引用. String s = "Hello"; 这个能解释很多的问题,比如: 问题:如果说字符 串是不可变的,为什么我能修改它? s+=“!…
在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递.数据的格式通常有2种:1.xml:2.JSON.通常来说都是使用JSON来传递数据.本文正是介绍在Java中JSON与对象之间互相转换时遇到的几个问题以及相关的建议. 首先明确对于JSON有两个概念: JSON对象(JavaScript Object Notation,JavaScript对象表示法).这看似只存是位JavaScript所定制的,但它作为一种语法是独立于语言以及平台的.只是说…
在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递.数据的格式通常有2种:1.xml:2.JSON.通常来说都是使用JSON来传递数据.本文正是介绍在Java中JSON与对象之间互相转换时遇到的几个问题以及相关的建议. 首先明确对于JSON有两个概念: JSON对象(JavaScript Object Notation,JavaScript对象表示法).这看似只存是位JavaScript所定制的,但它作为一种语法是独立于语言以及平台的.只是说…
看到大家对上篇<Java面试中遇到的坑>一文表现出强力的关注度,说明大家确实在面试中遇到了类似的难题.大家在文章留言处积极留言探讨面试中遇到的问题,其中几位同学还提出了自己的见解,我感到非常高兴,还有几位同学强烈要求给出题目答案,那我很乐意跟大家一起探讨分享这些题目. 我将题目答案写下来,这个并非标准答案,有不准确的地方请大家辩证补充. 1.StringBuilder替代String拼接,面试中经常会问到String,StringBuilder,StringBuffer的区别. 解答:Stri…
今天,魏屌出了一道题,题目如下: 定义一个大头序的byte[]a={-1,-2,-3,-4},转换成short[]b.问b[0]和b[1]分别是多少? 乍一看,这题不难,无非就是移位操作,再进行组合.但是呢?对于用Java的童鞋来说,这里面有一个坑,稍不注意可能就踩进去了.在说之前,我先把代码和答案贴出来吧. 看到这里,可能有的童鞋比较奇怪,为啥要&0xff,这不相当于没变化吗?非也,不信我举个例子. 答案是-127和129.很奇怪不是吗?我想的明明都是-127啊!!! 解答这个问题之前,我们先…
Java 中的转义字符有好几种,常见的有: 八进制转义字符,格式:\ + 1到3位八进制数字,如\1, \20,范围为 \0 ~ \377,即最大值为255. Unicode转义字符,格式:\u + 四个十六进制数字,范围为\u0000 ~ \uFFFF,即:0~65535 特殊字符,包括3个:\":双引号:\':单引号:\\:反斜线 控制字符:包括5个:\' 单引号字符:\\ 反斜杠字符:\r 回车:\n 换行:\f 走纸换页:\t 横向跳格:\b 退格 现实中,如果想要原样输出反斜杠是比较麻…
在Java中,不存在Unsigned无符号数据类型,但可以轻而易举的完成Unsigned转换. 方案一:如果在Java中进行流(Stream)数据处理,可以用DataInputStream类对Stream中的数据以Unsigned读取. Java在这方面提供了支持,可以用java.io.DataInputStream类对象来完成对流内数据的Unsigned读取,该类提供了如下方法:(1)int   readUnsignedByte()    //从流中读取一个0~255(0xFF)的单字节数据,…
[1]您确定真正了解后缀表达式与前缀表达式的区别吗? public class IncrementDemo{ public static void main(String[] args) { int i = 0; int j = 0; i = i++; j = ++j; System.out.printf("i=%d,j=%d \n",i,j); } } 输出结果是什么呢? 关于前缀表达式与后缀表达式,JLS中是这样解释的: 1.The value of the postfix inc…
文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 在Java中,遍历集合和数组一般有以下三种形式: for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i) + ","); } Iterator iter= list.iterator(); while (iter.hasNext()) { System.out.print(iter.next() + ",");…
java循环结构 顺序结构的程序语句只能 被执行一次.如果你要同样的操作执行多次,就需要使用循环结构. java中有三种主要的循环结构: 1.while 循环 2.do...while 循环 3.for 循环 1.while循环           while是最基本的循环,它的结构为: public static void main(String[] args) { int x = 10; while (x < 20) { System.out.print("value of x :&q…
我们之前讨论过时间,在Java 中有一些方法会出现横线?比如Date 过期方法. 参考文章:知识点:java一些方法会有横线?以Date 过期方法为例 Java中的日期和时间处理方法 Date类(官方不再推荐使用,官方解释Date类不利于国际化,推荐使用Calendar类) Calendar类 DateFormat类 使用此类来时间初始化 我们发现,时间toLocalString 会有横线: vo.setSubmitDate(new Date().toLocaleString()); 可以改为:…
Java开发中很多人都不愿意修改自己以前的代码,看别人的代码更是无法忍受,当看到别人代码里面一些匪夷所思的写法实现时,恨不得找到负责人好好跟他谈谈心,那么你在开发中是不是也使用到以下几种实现呢. 1.StringBuilder替代String拼接面试中经常问 String,StringBuilder,StringBuffer的区别. 1.对参数未做空验证,就做判断值相等 下面的写法将常量放到方法左边,能防止NPE. 2.这个坑很多兄弟都踩过,知道为什么? 打印结果为false,而下面结果为tru…
关于Java中语句符号及格式的理解 这篇文章是撰写的第一篇文章,在此作一下博主是一名在读的工科研究生,种种原因,研二开始决定转行从事程序员工作.开始的自学之路并不算非常顺畅,也走了一点弯路,但一直都坚持了下来,慢慢地,在学习的过程中渐入佳境,找到了学习的兴趣和成就感.开通这个博客,既有出于在技术层面上不断追求的希冀,也希望记录自己在学习路程上的生活点滴,和各位同仁共勉. 谈一谈对于流程控制语句中的格式的理解,在我看来对于一种编程语言,其语言的规范格式其实都是一样的,无论你是什么样的语法句子,其”…
JAVA编码中存在一些容易被人忽视的陷阱,稍不留神可能就会跌落其中,给项目的稳定运行埋下隐患.此外,这些陷阱也是面试的时候面试官比较喜欢问的问题. 本文对这些陷阱进行了统一的整理,让你知道应该如何避免落入陷阱中,下面就一起来了解下吧. 循环中操作目标list 遍历List然后对list中符合条件的元素进行删除操作,这是项目里面非常常见的一个场景. 先看下两种典型的错误写法: 错误写法1: for (User user : userList) { if ("男".equals(user.…
JAVA中简单的for循环竟有这么多坑,你踩过吗 实际的业务项目开发中,大家应该对从给定的list中剔除不满足条件的元素这个操作不陌生吧? 很多同学可以立刻想出很多种实现的方式,但你想到的这些实现方式都是人畜无害的吗?很多看似正常的操作其实背后是个陷阱,很多新手可能稍不留神就会掉入其中. 倘若不幸踩中: 代码运行时直接抛异常报错,这个算是不幸中的万幸,至少可以及时发现并去解决 代码运行不报错,但是业务逻辑莫名其妙的出现各种奇怪问题,这种就比较悲剧了,因为这个问题稍不留神的话,可能就会给后续业务埋…
这次有两个主题,第一个太简单啦,就是java中变量的命名规则,纯记忆性东西.第二个主题,就是讨论一下对象引用变量的一个注意点.…
发现在高请求量的时候获取hostName慢,后发现getHostName方法慢导致的:需要获取hostName为获取ip的方式了:java 中 InetSocketAddress // remoteAddress.getHostName() //获取hostName时耗时长,改方法要慎用:(先从本地取,如果本地没取到从远程dns中取) remoteAddress.getAddress().getHostAddress() : //改用这种方式获取ip…
JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环).iterator遍历. 1.for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")) list.remove(i); } 这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素.比如当你删除第1个元素后,继续根据索引访问第2个元素时…
== 与 equals()的联系: ==: 我们都知道Java中 == 对用于基础数据类型(byte, short, int, long, float, double, boolean, char)判断时, 是直接对变量值的比较. 而对于引用类型变量则是对变量地址的比较. equals(): 我们可以通过查阅源码看到Object类中equals()方法依然是直接对地址的比较 当然, 常见的Java类都重写了equals方法, 如封装类, Date等. 这里我们只说下Integer和String重…
Java 中两个字符串比较大小,可以有两种方式判定,要根据需求选择 == 判定,比较的是两个字符串的内存地址,地址相同则判定为true:反之则反 equals() 判定,比较的是两个字符串的内容,内容一致不管地址是否相同,判定为true:反之则反…
问题的提出:如果我们编译运行下面这个程序会看到什么? public static void main(String args[]){ System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println("BigDecimal:"+new BigDecimal(Double.toString(4.015)).multiply(new B…
最近在使用Java中需要使用PQ形式的私钥进行RSA加解密运算,本来以为Java中应该很多类似的例子,发现所有的例子都是从ND形式的私钥,竟然没有人用分量P和Q计算N和D进行运算.对Java使用RSA运算不太熟,只能自己一点一点搞了.身边的Java 的仙们,好像身边都没人中国剩余定理,所以也不会遇到P和Q?不管他们了,开工了. 1.BigInteger类 Java中有现成的大数运算的BigInteger类,直接使用这个类进行运算即可,总结一下使用中遇到的坑.Java的大数多1bit表示符号,所以…
很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下. 在使用中,需要将 byte 类型的的每一位都置 1.我万万没有想到这么一个简单的操作,在 Java 中有各种约束. 首先看看代码: // 方式 1 byte allBitsOne = 0xFF; // 方式2 byte allBitsOne = (byte)0xFF; // 方式3 byte allBitsOne = 0xFFFFFFFF; 上面的哪个…