基础数据类型

  • 一、基础数据类型
    • 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有什么区别呢?

 //valueOfpublic static Integer valueOf(int i) {return  i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128];}///intValuepublic 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、运算相关推荐

  1. Practical Python基础1(数据类型,运算,比较符号,字符串,列表,函数等)

    Practical Python基础1(数据类型,运算,比较符号,字符串,列表,函数等) Python是一种解释性的高级编程语言.它通常被归类为"脚本语言",被认为类似于Perl. ...

  2. JAVA基础之变量(数据类型及其转换)

    变量 变量的概念: 内存中的一个存储区域: 该区域的数据可以在同一类型范围内不断变化: 变量是程序中最基本的存储单元.包含变量类型.变量名和存储的值. 变量的作用: 用于在内存中保存数据. 使用变量注 ...

  3. 新的JAVA基础第一天---数据类型等

    内容 java基础知识, java流程控制语句, 常用包和类 ,数组操作, 面向对象的概念 ,异常处理 ,文件访问iO流, 数据集合操作, 集合框架 jDBC访问数据库 目标掌握基础 java语言简介 ...

  4. 【java基础06:数据类型】及拓展、转义字符、计算机二进制的表现形式

    目录 JAVA是强类型语言,所有的变量必须先定义才能使用. 计算机只认识二进制,那么计算机是怎么表示现实世界当中的文字的呢? 计算机二进制的三种表现方式:源码.反码.补码 char类型 整数型 整数型 ...

  5. [Java]介绍|环境|编码|数据类型|String|运算符|标准输入|if语句|循环语句|三元运算符|循环语句|swich语句

    一.介绍 1.java是oracle(甲骨文)公司的. 2.JAVA语言有3类应用 1)JAVAME 用于嵌入式开发. 比如:电视机顶盒.打印机.PDA又称掌上电脑(手机.平板电脑.游戏机.扫码枪). ...

  6. Java基础之基本数据类型

    前言:Java内功心法之基本数据类型,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 变量就是申请内存来存储值.也就是说,当创建变量的时候,需 ...

  7. Java基础18-String类【String类的特点对象个数常用方法】【超详细讲解】

    Java基础-String类[超详细讲解] String类的特点 String在java.lang.String包中 1:特点 (1)String类型不能被继承,因为由final修饰 (2)Strin ...

  8. java基础之封装数据类型

    为什么要使用封装数据类型: Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,很多地方都需要使用对象而不是基本数据类型.比如,在集合类中,我们是无法将int .doubl ...

  9. Java基础 | 第七弹—String(积少成多)

    ⭐️ 不爱生姜不吃醋,原创不易,转载请注明原链接 ❗️ 注:本文写的是Java基础知识❗️ 文章目录 1.String概述 2.特点 3.String构造方法 4.String对象的特点 5.字符串的 ...

  10. 【Java 基础】字符串(String、StringBuilder),日期(Date、SimpleDateFormat、Calendar)

    字符串.日期 字符串(String) 字符串常量池(String Constant Pool) 字符串的初始化 intern 方法 字符串的常用方法(截取) 可变字符串(StringBuilder) ...

最新文章

  1. 更改windows域名
  2. P3758 [TJOI2017]可乐
  3. VTK:Utilities之OffScreenRendering
  4. 使用category 01同时下载3个hierarchy equipment
  5. char **p, char a[16][8]; 问:p=a 是否会导致程序在以后出现问题?为什么?
  6. matlab井深测量,一种井深测量系统及方法与流程
  7. 打开chrome控制台的快捷键
  8. 院士怒批:中国科研被SCI和西方支配,贫于创新、贫于思想
  9. 052、JVM实战总结:从测试到上线:如何分析JVM运行状况及合理优化?
  10. Codeforces Round #249 (Div. 2) (模拟)
  11. java 获取上传文件后缀_java 文件上传相关知识及得到后缀名
  12. 网景R6400做无线中继服务器,网件R6400刷梅林后5G掉线假死怎么办解决办法
  13. 七大江河水系--辽河
  14. R语言 聚类分析代码 系统聚类 K均值聚类 可视化
  15. Adobe全家桶系列百度云(含最新软件安装包+安装教程)
  16. 纯H5+CSS3实现下雨特效
  17. [深度学习]动手学深度学习笔记-12
  18. 青蛙跳石头java_青蛙跳台阶(JAVA)与递归问题探究
  19. API 接口测试,用这个开源的工具准没错
  20. ARM AArch32和AArch64通用寄存器、状态寄存器

热门文章

  1. MATLAB函数downsample的用法详解
  2. 基于am5718的【ARM-Linux开发】wayland和weston的介绍
  3. 洛谷p2404 自然数的拆分
  4. 激光检测----激光原理简述
  5. 谷歌账户无法添加_如何将多个Google帐户添加到Google Home
  6. 黑苹果热补丁hotpatch来禁用笔记本独显
  7. 2022第七届少儿模特明星盛典 小主持人江姿莹 T台风采展示
  8. 【JZOJ1758】过河
  9. Benchmark 第一篇 了解Benchmark
  10. 记录一个db2 中LISTAGG函数问题:The length resulting from “LISTAGG“ is greater than “4000“