关键词:
数据类型
Java中存在2种数据类型,下面我们来详解一下:
- 基本数据类型;
- 引用数据类型;
可以用一张表来记录:
基本数据类型
整型
- byte:1个字节8位,取值范围为:[-128, 127],直接写值:(byte) 1;
- short:2个字节16位,取值范围为:[-32768, 32768],直接写值:(short) 1;
- int:4个字节32位,取值范围为:[-2147483648, 2147483648],直接写值:1;
- long:8个字节64位,取值范围为:[-9233372036854477808, 9233372036854477808],直接写值:1L;
- char:2个字节16位,取值范围为:[0, 65535],直接写值:(char) 1或‘a‘;
(注意Java中没有无符号类型,需要使用无符号类型需要自行扩展,可以参考我的扩展类库)
浮点型
- float:4个字节32位,直接写值:1.0F;
- double:8个字节64位,直接写值:1.0D;
布尔型
- boolean:1个字节8位,取值范围为:true或false;
引用数据类型
- String:字符串类型,无长度限制,直接写值:"abc";
- java.math.BigInteger:基本数据中的整型不能满足需求时可以使用该类来表示任意大小的整型数据;
- java.math.BigDecimal:基本数据中的浮点型不能满足需求时可以使用该类来表示任意精度的浮点型数据;
- 其他类型:类、接口、数组等其他类型;
栈和堆
栈内存
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
堆内存
堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。
从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的。
另外,栈内存的内容会在作用域结束时自动移除,而堆内存的释放要借助Java的垃圾回收机制来完成。
包装类
不同于C#的万物皆对象,Java中,基本数据类型仅仅是数据而非对象,所以为了能将基本类型视为对象进行处理,并能连接相关的方法,java为每个基本类型都提供了包装类。以便将基本数据类型作为一个对象来处理。
C#中一切皆对象,所以将一个数字转换为16进制可以这么写:
254.ToString("x");//输出FE
但是在Java中,整型数据并不是对象,所以需要这么写:
new Integer(254).toString();//输出字符串"254"
包装类功能
- 提供数据的最大值与最小值;
- 提供转换为其他数据类型的功能;
int i = 5;//直接在栈中分配空间 Integer i = new Integr(5);//对象是在堆内存中,而i(引用变量)是在栈内存中
当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装类。
- 原始类型 包装类
- boolean Boolean
- char Character
- byte Byte
- short Short
- int Integer
- long Long
- float Float
- double Double
变量
在Java中定义变量的写法如下:
int a = 0; int b = 1, c = 2;
作用域
在栈内存中定义的变量是存在作用域的:
- 使用大括号来定义作用域;
- 作用域可以嵌套,子作用域可以访问父级的变量,父作用域不能访问子级的变量;
- 同一个作用域中的变量名不能重复;
- 离开作用域变量会被JVM自动回收;
下面我们看几个例子:
1 public static void main(String[] args) 2 { 3 int a = 0; 4 { 5 int b = 1; 6 a = 10; 7 } 8 a = b;//这行编译报错, 变量 b 离开自身作用域后就被回收了, 不能访问 9 }
1 public static void main(String[] args) 2 { 3 int a = 0; 4 { 5 int b = 1; 6 a = 10; 7 } 8 int b;//这个 b 是当前作用域创建的新变量, 值为默认的 0 而不是 1 9 a = b;//不报错, b 可以访问到 10 }
1 public static void main(String[] args) 2 { 3 int a = 0; 4 { 5 int a = 100;//报错, 子作用域不能使用父级已经存在的变量名 6 } 7 }
类型转换
数据类型之间常常会需要相互转换,下面我们来看看;
小数据向大数据转换
由JVM自动完成,不需要进行额外处理,称为隐式类型转换,如:
1 public class Main 2 { 3 public static void main(String[] args) 4 { 5 byte a = 16; 6 short b = a; 7 int c = b; 8 long d = c; 9 10 float e = 16.66f; 11 double f = e; 12 13 test(a); 14 test(e); 15 } 16 17 private static void test(int i) 18 { 19 } 20 21 private static void test(double i) 22 { 23 } 24 }
整数转换为浮点数时会出现精度丢失的情况。
大数据向小数据转换
需要强制转换,称为显式类型转换,如:
1 public class Main 2 { 3 public static void main(String[] args) 4 { 5 long a = 1L; 6 int b = (int) a; 7 short c = (short) b; 8 byte d = (byte) c; 9 10 double e = 16.66f; 11 float f = (float) e; 12 13 test((byte) a); 14 test2((float) e); 15 } 16 17 private static void test(byte i) 18 { 19 } 20 21 private static void test2(float i) 22 { 23 } 24 }
转换时要注意数据越界的问题。
java学习笔记三——数据类型
前言 Java是强类型(stronglytyped)语言,强类型包含两方面的含义:所有的变量必须先声明后使用;指定类型的变量只能接受预支匹配的值。 这意味着每一个变量和表达式都有一个在编译时就确定的类型。 Java数据类型... 查看详情
java学习笔记-数组
数组的复制在Java中,可以使用赋值语句复制基本数据类型的变量,但不能复制数组.将一个数组赋值给另一个数组变量,实际上是将一个数组的引用复制给另一个变量,使两个变量都指向相同的内存地址.复制数组有三种方法:1)使用循... 查看详情
学习笔记1(三元运算深浅拷贝动态参数全局变量与局部变量set数据类型)
(三元运算、深浅拷贝、动态参数、全局变量与局部变量、set数据类型)set数据类型--无序,不重复的集合一.三元运算、三木运算--减少代码量name=“X1”if条件else“x2”例子:name="alsx" if1==1else"e"二.深拷贝与浅拷贝:深拷贝拷... 查看详情
python学习笔记——变量与简单数据类型(代码片段)
接下来笔者将记录学习Python的相关历程,以供他人参考与自己查漏补缺。操作系统是使用的编译器是Pycharm,所用的Python版本为3.10运行helloworld时的发生的情况print("Helloworld");在编写程序时,文件名的后缀.py告诉... 查看详情
python笔记002——变量与数据类型(转换)(代码片段)
Python学习第一课——变量与数据类型变量(变量由标识、类型、值组成)name='builing' #声明变量print(name) #输出变量的值print('标识',id(name)) #id()获得变量的标识(地址)print('类型',type(name)) #type()获得... 查看详情
matlab学习笔记——数据类型
MATLAB每种数据类型均为矩阵或数组的形式。矩阵或数组的最小值为0*0。一变量1.1变量的定义MATLAB变量的命名规则如下:(1)大小写敏感(2)变量名长度不得超过63位(3)变量名只能以字母开头,可... 查看详情
java学习笔记一:变量类型
Java语言支持的变量类型有:类变量:独立于方法之外的变量,用static修饰。实例变量:独立于方法之外的变量,不过没有static修饰。局部变量:类的方法中的变量。publicclassCount{privatestaticintstaticnum=0;//静态变量privateintlvars=0;//实... 查看详情
go语言学习笔记—基础—基本数据类型—指针:取地址与取值
&普通类型取对应变量的内存地址,得到指针类型。*指针类型从对应指针的内存地址值,取出值。 查看详情
《javascript高级程序设计》学习笔记|4.1.原始值与引用值
关注前端小讴,阅读更多原创技术文章原始值与引用值JS变量是松散类型的:①不必规定变量的数据类型②变量的值和数据类型可随时改变JS变量可以包含2种类型的数据:原始值和引用值原始值是简单数据(6种原始值:Undefined、... 查看详情
《javascript高级教程》学习笔记变量和数据类型
JavaScript的核心语言特性在ECMA-262中是以名为ECMAScript的伪语言的形式来定义的。一、变量和数据类型1.变量JavaSript是弱类型语言,可以通过var定义任何类型变量,同时同一变量可以被赋值成不同类型。JavaScript可以在语句结尾省略... 查看详情
go语言学习笔记—基础—基本语法—常量与变量—常量变量的声明:单个变量的声明与赋值(代码片段)
变量来源于数学,是计算机语言中储存计算结果或表示值的抽象概念,变量可以通过变量名访问。变量的功能是存储用户的数据。不同的逻辑有不同的对象类型,也就有不同的变量类型。经过半个多世纪的发展,... 查看详情
java学习笔记4.4.2包装类-基本数据类型包装类与字符串相互转换
文章目录零、本讲学习目标一、基本数据类型转换成字符串(一)转换方法(二)案例演示二、基本数据类型转换成包装类(一)转换方法(二)案例演示(三)注意事项三、将字符串数据转换成基本数据类型(一)转换方法(... 查看详情
unity学习笔记结构体的简单理解与应用
Unity中的结构体的简介与使用一、Unity中的结构体是什么?二、结构体与类的不同一、Unity中的结构体是什么?简单来说,在C#中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据... 查看详情
swift学习笔记(语法篇)--string与character类型
一:String概述不同于Objective-C中的NSString与NSMutableString,在Swift中,存储String类型的数据能否改变,取决于定义数据是var还是let,var是变量,能改变String的长度,增加,修改,删除其中的每一个字符等操作,而let是常量,一旦定义... 查看详情
学习java的杂乱笔记
1.局部变量:定义在方法中的变量,定义在方法中的参数的变量,定义在for循环中变量,都是局部变量,在栈内存中开辟一个空间,数据使用完毕,自动释放。2.何定义一个函数?(不需要死记,只需了解) 1.既然函数是一个独... 查看详情
kotlin学习笔记——基本类型函数lambda类与对象的写法
最近终于要入坑Kotlin啦~这是系列学习笔记的首篇,一起来学习鸭~1.基本类型varage:Int=123//标准语法,声明一个可变变量agevalname:String="Tom"//标准语法,声明一个不可变变量name(不可变变量不是常量)valsex:String?=null//声明一个可为空的... 查看详情
java基础学习笔记(基本规范变量定义运算符分支/循环结构函数)(代码片段)
文章目录Java概述与环境搭建Java历史Java语言特点Java执行机制安装jdk环境变量配置乱码问题解决基本规范简单Java代码编译运行注释语法规则变量类型声明方式基本数据类型问题:数据类型不兼容赋值案例字符型常量转义字符... 查看详情
java学习笔记3(datawhale教程)(代码片段)
java学习笔记3(datawhale教程):类与方法,继承与多态,抽象类与接口文章目录java学习笔记3(datawhale教程):类与方法,继承与多态,抽象类与接口一.类与方法1.类与对象2.成员变量3.成员方法语法格式来看例子成员方法的参数值参数引用参数... 查看详情