1.Java:字符串(String)类型转成整型(int)的方法
2.Java面试指南(一): int和Integer的区别
3.java中源码反码补码与取反的理解
4.求Java源代码:用Java实现输出:输入一个正整数,将该数的各位左右反转输出
Java:字符串(String)类型转成整型(int)的方法
在Java中,将字符串转换为整型有多种方法,其中使用频率较高的有Integer.parseInt()和Integer.valueOf()。
无论字符串代表的位置数或负数,转换逻辑均相同。家教中介源码在Integer.java源代码中,这两个方法使用相同的签名进行转换,即使用parseInt(s,)进行转换。然而,它们返回的结果不同。
输出:
使用Integer.parseInt()时,示例将字符串""转换为原始类型int。
输出:
使用Integer.valueOf()时,示例将字符串""转换为Integer对象。
最佳实践建议是在转换前检查输入,避免因无效数字输入而抛出NumberFormatException。一个有效做法是使用正则表达式String.matches("[0-9]*")来验证字符串是否只包含数字。
Java 8的开发者可能倾向于使用Optional和Stream来简化转换过程。例如,通过创建一个可选的整型值并使用Stream操作将其转换为Integer。
Java面试指南(一): int和Integer的源码保密系统区别
即将迎来跳槽的高峰期,也就是常说的“金三银四”。由于本人年前就已经开始了求职面试的征程,直到现在才算尘埃落定,所以应该不会再加入跳槽大军了。“Java面试指南”这个系列的文章,主要是记录我在面试中整理的知识点和扩展思考,希望能对你有所帮助。
面试中的回答没有标准答案,只要能清楚表达关键点即可,所以文中的答案仅供参考。
今天的问题是:int和Integer的区别是什么?在继续阅读之前,我希望你能停下来思考一下:如果面试时面试官问你这个问题,你会怎么回答?
一、面试回答
int是Java中的整型数字,是Java的8种原始数据类型之一,其他七种是:boolean、byte、short、char、float、long、cmma指标源码double。尽管Java中一切都是对象,但这八种数据类型是一个例外。
Integer是Java中int类型的包装类,有一个int类型的类变量value储存数据,并提供了基本的数学运算和类型转换。
Java5引入了自动装箱/拆箱,编译阶段会根据上下文自动进行转换。装箱会调用Valueof(),拆箱会调用intValue。从Java9开始,Integer的构造器被标记为废弃,官方文档要求使用Integer的静态工厂类ValueOf方法。
Integer类的ValueOf方法中有一个缓存机制,会先对数值进行判断,如果数值在默认的[-:]之间,则返回缓存的对象,否则返回一个新的Integer对象。上限可以通过JVM提供的配置(-XX:AutoBoxCacheMax)进行修改。
二、深入理解
一般来说,17源码交流很少有面试官会在面试时问到int和Integer的区别,而有关缓存的考点更多会出现在笔试题中。但这并不代表我们不需要关注和理解。例如,在日常编码时,什么时候该用int,什么时候该用Integer,你是否真的清楚?
(一)、缓存机制
所谓的缓存机制,就是基本类型的包装类为了提升效率和节约内存而引入的机制。除了Integer类默认情况下缓存了[-:]之间的数值外,其他基本类型(除了Float和Double)都有缓存对象。
(二)、自动装箱/拆箱
谈及基本数据类型与包装类,自然会聊到自动装箱和拆箱。这两种行为是Java中提供的语法糖之一,即Java平台为了方便程序开发,而在底层进行的一些转换操作。这种语法对语言本身功能而言并不会产生什么影响,转换的工作发生在编译阶段。
以int和Integer为例,梦龙源码在日常编码时我们更习惯于直接将整数赋值给变量,而不是使用Integer.Valueof()方法,但代码的运行结果是一致的。
使用javac编译这两行代码后,再用javap查看编译后的class文件,就能看到:
(三)、基本类型的线程安全
由于JVM直接保证的原子性变量操作包括read、write、assign、store、load,大致可以认为基本数据类型的读写是具备原子性的(除了long和double,这两种基本类型的读写原子性依赖于虚拟机的具体实现,因为对于没有使用volatile修饰的位的数据结构,Java虚拟机规范是允许分两次来操作的)。
除了读写操作外,对基本类型的变量操作都是非线程安全的,需要利用相关的并发技术来保证线程安全,比如加锁或者使用JUC下的Atomic开头的线程安全类。
(四)、源码阅读
Integer类从整体上来看,主要包括了用于表示最大值、最小值、位数等信息的常量,将各种其他类型转换为Integer对象的静态工厂方法valueOf()以及将整数转换为其他基本类型的方法,如byteValue()、shortValue()等等,还提供了进制转换的方法,如toBinaryString()用于将整数转换为二进制字符串。
1. Integer源码
Integer是不可变类,使用了final修饰class,表明Integer无法被继承,使用final修饰的value属性来保存数字,即一旦Integer对象创建后,数值就不会再改变。
Integer的最大值为0x7fffffff,转换成十进制为2^-1,最小值为0x,转换成十进制是-2^。使用常量SIZE=来表示int的位数,即位。因为int是有符号数,需要一位来表示正负号,所以剩下的位用来表示实际的数值。
2. Integer的缓存机制
Integer缓存的对象保存在Integer的内部类IntegerCache中,static语句块中是缓存对象的生成逻辑。默认情况下,- ~ 范围内Integer对象保存在Integer数组中。
static语句块会在初始化阶段,由虚拟机执行方法时执行。虚拟机会保证同一时间只会有一个线程执行方法,所以是线程安全的。而cache数组对象是单例,也就是说IntegerCache采用了单例模式。
三、小结
尽管面试中直接问到int和Integer的区别的几率并不大,而且也没有特别多可以展开细说的知识点,但关于Integer的源码,建议还是要去阅读了解。最后,祝君面试顺利,薪资翻倍!
END
java中源码反码补码与取反的理解
在计算机中,数字以二进制表示,有正数和负数之分。其中,补码、反码和源码是表示负数的三种方法。
负数从源码转为补码,符号位不变,数值位按位取反后加一。
负数从补码转为原码,符号位不变,数值位按位取反后加一。
负数从反码转为补码,数值位加一。
在Java中,~符号执行按位取反运算。例如,~5的值为-6,-5的值为4。运算逻辑为,先将数值转换为二进制,对每一位取反,得到的是补码,需要再次取补码才能得到原码。
按位取反与反码不同。反码法中,正数原反补码相同,负数反码为原码除符号位外取反。而按位取反运算中,正数取反先转二进制,取反后得到补码,需再取补码转换为原码;负数取反后得到补码,取反即可得到原码。
计算机运算基于补码。理解这一点有助于避免混淆概念,误取反码。
在计算机中,信息以二进制形式存储,最高位表示符号,0为正,1为负。
讨论反码、补码和原码的使用。举例,以3为例,取反后得到值-4。注意取反与反码的区别。
以int数据类型为例,假设由8位组成,最高位表示正负。取反得到的是补码,表示负数。负数的反码加一等于补码。因此,取反后得到的值为-4。
求Java源代码:用Java实现输出:输入一个正整数,将该数的各位左右反转输出
不知道这样写是不是符合你的要求?
public class Temp {
public static void main(String[] args) {
String str = String.valueOf();
StringBuffer buff = new StringBuffer();
System.out.println(str);
for(int i=str.length()-1;i>=0;i--){
buff.append(str.charAt(i));
}
String retStr = buff.toString();
Integer retInt = Integer.valueOf(retStr);
System.out.println(retInt);
}
}
2024-11-27 19:54
2024-11-27 19:43
2024-11-27 19:24
2024-11-27 18:45
2024-11-27 18:19
2024-11-27 18:03