java基础初解一:数据类型、String、运算
2021/7/30 17:08:15
本文主要是介绍java基础初解一:数据类型、String、运算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基础数据类型
- 一、基础数据类型
- 1.1八大数据类型:
- 1.2装箱与拆箱
- 1.3new与valueOf的区别
- 二、 String
- 2.1 概览
- 2.2 String,StringBuffer,StringBuilder三者的区别?
- 三、运算
- 3.1参数传递
- 3.2 隐式类型转换
一、基础数据类型
1.1八大数据类型:
byte 8字节
char 16字节
short 16字节
int 32字节
float 32字节
long 64字节
double 64字节
boolean ~未定义,底层转换为int类型中的1和0来表示true和false
1.2装箱与拆箱
每个基本数据类型都有对应的
包装类型,基本数据类型与包装类型之间使用会装箱与拆箱。
int total = 99; //执行Integer.valueOf(99); int totalprim = total; //执行 total.intValue();
Integer total = 99;
执行上面那句代码的时候,系统为我们执行了:
Integer total = Integer.valueOf(99);
int totalprim = total;
执行上面那句代码的时候,系统为我们执行了:
int totalprim = total.intValue();
那么valueOf和intValue有什么区别呢?
//valueOf public static Integer valueOf(int i) { return i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128]; } ///intValue public int intValue() { return value; }
valueOf它会首先判断i的大小:如果i小于-128或者大于等于128,就创建一个Integer对象,否则执行SMALL_VALUES[i + 128]。在Integer对象中传入的一个value变量进行初始化,如果传入的是String则会将String’转换为int类型后进行初始化。
而在SMALL_VALUES[i + 128]中它是一个静态的Integer数组对象,也就是说最终valueOf返回的都是一个Integer对象。
所以我们这里可以总结一点:装箱的过程会创建对应的对象,这个会消耗内存,所以装箱的过程会增加内存的消耗,影响性能。
intValue则是直接返回值。
1.3new与valueOf的区别
new:每次都会创建一个新的对象。
valueOf:会先在缓冲池中寻找对象,找到对应对象则直接使用缓冲池对象,多次调用使用的是同一个缓冲池对象的引用。
Integer x = new Integer(1); Integer y = new Integer(1); x == y ? //false Integer x = Integer.valueOf(1); Integer y = Integer.valueOf(1); x == y ? //true
二、 String
2.1 概览
String的声明为final类,无法被继承(基本数据类型的包装类也无法被继承)。
String在java8中使用char存储数据。
原码如下:
public final class String implements Serializable, Comparable<String>, CharSequence { private final char[] value; private int hash; private static final long serialVersionUID = -6849794470754667710L; private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0]; public static final Comparator<String> CASE_INSENSITIVE_ORDER = new String.CaseInsensitiveComparator(); }
在java 9 后改为了使用byte存储数据。
String中的value数组被声明为final也就是不可变,这就意味着String在初始化之后不能引用其他类型数据。同时在String中没有方法能改变value的值,因此就可以保证String的值不可变,那么这么做的好处是什么?
1.可以缓存hash值
2.String pool的需要
当String对象被创建过之后就会从String中取得引用,而只有String不可变才能使用String Poll。
3.安全性
String往往被当做参数传递,String不可变就意味着参数不可变。
4.线程安全
2.2 String,StringBuffer,StringBuilder三者的区别?
1.可变性
String 不可变
StringBuffer和StringBuilder可变
2.线程安全
String 不可变,因此线程安全
StringBuilder 不是线程安全的。
StringBuffer 是线程安全的,通过synchronized进行同步。
三、运算
3.1参数传递
在java中方法的参数传递只有值传递没有引用传递。
class Example{ public static void main(String[] args){ Test t = new Test("a"); change(t) System.out.println(t.name);//b } public static void change(Test t){ t.setName("b"); } }
在上述代码中t 指针存储的是对象的地址,在方法中传递的是对象t的地址,是将对象地址以值的形式进行传递,所以在后续修改对象name的时候由于使用的是同个独享地址所以t对象的name就会被修改为b。
3.2 隐式类型转换
java中无法使用隐式向下转型。因为这会损失一部分精度。
float f = 1.1; //错误
字面量为double,不能直接赋值给float因为这是向下转型。正确写法应该是:
float f = 1.1f;
但是在使用+=或则++的的时候可以执行隐式类型转换。
这篇关于java基础初解一:数据类型、String、运算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20软考高项学习:新手入门指南
- 2024-11-20软考考前冲刺学习:轻松备考指南
- 2024-11-20软考论文讲解学习:新手入门攻略
- 2024-11-20软考论文指导学习:新手入门指南
- 2024-11-20软考培训学习:新手入门全指南
- 2024-11-20软考选择题学习:从入门到掌握的简单教程
- 2024-11-20软考培训入门指南:轻松掌握软考必备技能
- 2024-11-20软考认证入门教程:轻松掌握IT认证考试
- 2024-11-20软考试题解析与备考指南
- 2024-11-20软考选择题解题技巧入门指南