JAVA基本数据类型

Java 基本数据类型 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。 阅读详情

 

不管是java还是其他语言,都会有基本数据类型,这种类型更加方便常用。

在java中,基本数据类型直接存储在堆栈中

java有八种基本数据类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型

基本类型大小最小值最大值包装器类型
boolean------Boolean
char16-bit\u0000(即为0)\uffff(即为65,535)

Character

byte8 bits-128+127Byte
short16 bits-2^15+2^15-1short
int 32 bits-2^31+2^31-1Integer
long64 bits-2^63+2^63-1Long
float32 bitsIEEE754IEEE754Float
double64 bitsIEEE754IEEE754Double

boolean

boolean类型只有两个值,true和false,包装类型是Boolean,里面的hashcode方法是

public static int hashCode(boolean value) {
        return value ? 1231 : 1237;
    }

 

char

char是字符类型,有如下几种定义方式,可以用单引号直接定义,也可以用在char的取值范围内的数字定义,还可以用十六进制定义,还有就是用'\uxxxx'的形式定义

       char c1 = 'a';  //char 0 - 2^16-1
       char c2 = '中';
       char c3 = 20013;
       char c4 = 0x4e2d;
       char c5 = '\u4e2d';
       //char c4 = -1;
       System.out.println("next is about char ");
       System.out.println("==c1:"+Integer.toBinaryString(c1)+"==c2:"+Integer.toBinaryString(c2)+"==c4:"+Integer.toBinaryString(c4));
       System.out.println("===c1:"+c1+"===c2:"+c2+"===c1:(int)"+(int)c1+"===c2:(int)"+(int)c2+"===c3:"+c3+"===c4:"+c4+"===c5:"+c5);
       System.out.println(Character.hashCode(c1)+"=="+Character.hashCode(c2)+"=="+Character.hashCode(c3)+"=="+Character.hashCode(c4)+"=="+Character.hashCode(c5));
       

输出结果为

next is about char 
==c1:1100001==c2:100111000101101==c4:100111000101101
===c1:a===c2:中===c1:(int)97===c2:(int)20013===c3:中===c4:中===c5:中
97==20013==20013==20013==20013

上面可以得知不同的定义方式定义同一个字符结果是一样的,Character的hashcode方法得到的结果是它转为int的结果

//character的hashCode源码
public static int hashCode(char value) {
        return (int)value;
    }

byte

byte是由8位二进制组成的带符号的最小的数字类型。这里要说一下bit和byte的区别。

bit(比特)是表示信息的最小单位,就是一个二进制的的一位

byte由8 bit组成,是数据存储的基础单位,1Byte又称为一个字节,用一个字节(Byte)储存,可区别256个数字。

 

short

短整型,长度只有int型二分之一,节省空间

int

整型,32位,一般整型默认为int型

byte,short,int的hashcode都是转为int型的本身

//short,byte,int
public static int hashCode(char value) {
        return (int)value;
    }

 它们三个可以看作都是类似的,在范围内都可以互相转换。都可以通过Integer.toBinaryString(xxx)查看二进制

       byte by = 'a';
       System.out.println("next is about byte ");
       System.out.println(Byte.hashCode(by));
       System.out.println(by);
       System.out.println(Integer.toBinaryString(by));
       short s = 1;
       short s1 = -1;
       System.out.println("next is about short ");
       System.out.println(Integer.toBinaryString(s)+"=="+Integer.toBinaryString(s1));
       System.out.println(Short.hashCode(s)+"=="+Short.hashCode(s1));
       int i = 120;
       int i1 = -1;
       System.out.println("next is about int ");
       System.out.println(Integer.toBinaryString(i)+"=="+Integer.toBinaryString(i1));
       System.out.println(Integer.hashCode(i)+"=="+Integer.hashCode(i1));
next is about byte 
97
97
1100001
next is about short 
1==11111111111111111111111111111111
1==-1
next is about int 
1111000==11111111111111111111111111111111
120==-1

long

长整型,64位,它的hashcode是将值无符号右移32位再与本身异或得到的值,定义大于int型的数时需在后面加个l/L

/**
     * Returns a hash code for a {@code long} value; compatible with
     * {@code Long.hashCode()}.
     *
     * @param value the value to hash
     * @return a hash code value for a {@code long} value.
     * @since 1.8
     */
    public static int hashCode(long value) {
        return (int)(value ^ (value >>> 32));
    }

 

float

单精度浮点类型,32位组成,第一位是符号位,0表示正数。后八位是指数位,用来存储科学计数法中的指数数据,并且采用移位存储。最后23位数是尾数部分

如下三个数。1.5转为二进制数是1.1*2^0,指数位是0,第2-9位就是127+0也就是0111 1111 (指数计算需加上127)

小数点转为二进制是将其*2看其是否大于1,如大于1,则二进制数唯一,否则为0,大于1后取小数部分继续*2

float的hashcode最后是native函数。

这里介绍下native修饰符:

总所周知java是一门跨平台语言,java的跨平台是怎么实现的呢,就是这个native关键字。native关键字的函数都是操作系统实现的, java只能调用,所以java的底层实际上就是在不同的平台上调用不同的native方法实现对操作系统的访问的。当我们看java源码的时候看到这个native就知道这个已经不是java语言能干的事了。

       float f = 1.5f; // 0 0111 1111 1000 0000 0000 .... 直到一共32位 3fc00000
       float f1 = -1.3f; // 1 0111 1111 0100 1100 1100 1100 .... 直到一共32位 bfa66666
       float f2 = -100.3f; // 1 1000 0101 1001 0001 0011 0011 .... 直到一共32位 0110 0100.0100 1100 1100 1100
       float f3 = 0xC2C89999;
       float f4 = 0x3fc00000;
       System.out.println("next is about float ");
       System.out.println(Float.toHexString(f)+"=="+Float.toHexString(f1)+"=="+Float.toHexString(f2));
       System.out.println(Float.hashCode(f)+"=="+Float.hashCode(f1)+"=="+Float.hashCode(f2));
       System.out.println(f3+"==="+f4+"=="+Float.intBitsToFloat(Integer.parseInt("3fc00000",16)));

结果中可以看到想将二进制转为其本身可以用Float.intBitsToFloat(Integer.parseInt("3fc00000",16))的方法,不过此方法受限于parseInt。直接使用二进制表示不出想要的浮点数。

next is about float 
0x1.8p0==-0x1.4cccccp0==-0x1.913334p6
1069547520==-1079613850==-1027040870
-1.0270409E9===1.06954752E9==1.5

double

双精度浮点类型,64位。与单精度类似,第一位是符号位,不过指数位有11位,最后52位数尾数部分

计算也与单精度类似,不过指数位是加上1023这个偏差值,毕竟他是11位。

它的hashcode简单的讲就跟long的差不多,不过是多了long bits = doubleToLongBits(value);这个最后也是个native修饰符

/**
     * Returns a hash code for a {@code double} value; compatible with
     * {@code Double.hashCode()}.
     *
     * @param value the value to hash
     * @return a hash code value for a {@code double} value.
     * @since 1.8
     */
    public static int hashCode(double value) {
        long bits = doubleToLongBits(value);
        return (int)(bits ^ (bits >>> 32));
    }

包装类

每个基本类型都有其包装类,我们知道java的一种思想就是一切皆对象,那么包装类的作用就是将基本数据类型转为一个对象

        Integer i = 2;//装箱
        int j = i;//拆箱

 看下面一段代码

        Integer x = new Integer(123);
        Integer y = new Integer(123);
        System.out.println(x==y); //false
        Integer z = Integer.valueOf(123);
        Integer k = Integer.valueOf(123);
        System.out.println(z==k); //true
        Integer i1 = Integer.valueOf(128);
        Integer i2 = Integer.valueOf(128);
        System.out.println(i1==i2); //false

 第一个new是新建了一个对象,所以两个不同。第二个一样,那第三个怎么不一样?原因是Integer.valueOf()会先判断值是否在缓冲池中,在的话直接返回缓冲池的内容,不是再新建个。Integer的缓冲池大小是-128到127。还有就是java9后就不建议使用new Integer()的方法。可以看到下方源码建议我们使用valueOf的方法。而且valueOf中@HotSpotIntrinsicCandidate这个注解在HotSpot中都有一套高效的实现,该高效实现基于CPU指令

 /**
     * Constructs a newly allocated {@code Integer} object that
     * represents the specified {@code int} value.
     *
     * @param   value   the value to be represented by the
     *                  {@code Integer} object.
     *
     * @deprecated
     * It is rarely appropriate to use this constructor. The static factory
     * {@link #valueOf(int)} is generally a better choice, as it is
     * likely to yield significantly better space and time performance.
     */
    @Deprecated(since="9")
    public Integer(int value) {
        this.value = value;
    }
    @HotSpotIntrinsicCandidate
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

    private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer[] cache;
        static Integer[] archivedCache;

        static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                try {
                    h = Math.max(parseInt(integerCacheHighPropValue), 127);
                    // Maximum array size is Integer.MAX_VALUE
                    h = Math.min(h, Integer.MAX_VALUE - (-low) -1);
                } catch( NumberFormatException nfe) {
                    // If the property cannot be parsed into an int, ignore it.
                }
            }
            high = h;

            // Load IntegerCache.archivedCache from archive, if possible
            VM.initializeFromArchive(IntegerCache.class);
            int size = (high - low) + 1;

            // Use the archived cache if it exists and is large enough
            if (archivedCache == null || size > archivedCache.length) {
                Integer[] c = new Integer[size];
                int j = low;
                for(int i = 0; i < c.length; i++) {
                    c[i] = new Integer(j++);
                }
                archivedCache = c;
            }
            cache = archivedCache;
            // range [-128, 127] must be interned (JLS7 5.1.7)
            assert IntegerCache.high >= 127;
        }

        private IntegerCache() {}
    }

关于缓冲池Boolean是true和false,四个整数型(Byte,Short,Integer,Long)都是-128到127。 Character是\u0000 到 \u007F

 

 

HighTec安装(官网免费)编译 嘎嘎详细~ 安装软件最好有自己的一套安装规则,工程软件除了安装主体外还会有很多其他的东西,比如license或者还会有一些驱动,如果所有都随意安装会导致你需要卸载,或者更新软件时,有的需要将原来软件卸载干净,如果没有清晰的安装路径那真是灾难啊~请确保此目录中只有个人许可证。这样基本的配置就ok了,下面打开hightec软件检验下license是否识别到了,会让你选个工作区,建议自己建一个,要不你以后就找不到了,,,如下图拉到下面,按照要求填写信息,随便写就行,注意主要的MAC地址要填本机的物理地址,然后点击2即可。 阅读详情

相关推荐

新手也能懂的Simulink汽车二自由度建模:从公式推导到模型搭建全流程

本文为新手提供了在Simulink中搭建汽车二自由度模型的完整实战指南。文章从模型核心概念讲起,详细讲解了如何将车辆动力学方程转化为状态空间模型,并逐步指导在Simulink中实现从参数设置、模块搭建到仿真验证的全过程。通过阶跃转向测试和参数影响分析,帮助读者直观理解车辆转向特性,并提供了实用的模型扩展思路与常见问题排查技巧。

weixin_29047919的博客 213

Java得另类写法

1、集合初始化 集合的创建、赋值一步到位,想不想学? 来,上边跟我一起画个 List,在你下边画一个Map List<String>list=newArrayList<String>(){{ add("www."); add("javastack."); add("cn"); }}; Map<String,String>map=newHashMap<String,String>(){{ put(...

dongbeiou的专栏 401

GIS国土工具实战:从地类分析到坐标转换,一站式解决项目难题

本文详细介绍了GIS国土工具在国土整治项目中的高效应用,涵盖地类分析、坐标转换、影像加载等核心功能。通过实战案例展示如何利用该工具快速处理shp与txt文件转换、智能比对三调二调数据,以及优化影像加载策略,显著提升项目效率。特别适合需要处理复杂国土数据的专业人员使用。

weixin_28732953的博客 334

常用类 四

常用类 文章目录常用类1. Object类1.1 构造方法1.2 方法1.2.1 hashCode1.2.2 getClass1.2.3 toString1.2.4 equals2. 包装类2.1 定义2.2 基本类型对应的包装类2.3 int转成字符串2.4 Integer构造方法2.5 Integer静态常量2.6 方法2.7 int --> String2.8 String --&gt...

qq_38620301的博客 570

PDDL入门

PDDL的组成部分 Objects:对象,世界上我们感兴趣的事物。 Predicates:谓词,我们感兴趣的事实(例如对象的属性),可以为真,也可以为假。 An initial state:初始化状态,我们开始所处的世界状态,即开始时为真的事物。 Goal specification:目标状态,我们想要结束的世界的状态,即我们希望最终成为真实的事情。 Actions/Operators:动作/操作,改变世界状态的方式,即发生的事情改变了事实。 PDDL语法 PDDL 文件的扩展名通常是.pddl 要

工控小白2021的博客 4821

【Android14 ShellTransitions】Transition就绪:双Transaction与SurfaceControl显示时机剖析

本文深入剖析了Android14 ShellTransitions框架中Transition就绪阶段的核心机制。重点解释了为何需要“双Transaction”来精确控制SurfaceControl的显示与隐藏时机,以确保Activity切换动画的流畅性。通过分析onTransactionReady流程、窗口绘制状态机及动画目标提升策略,揭示了系统如何协调WMCore与WMShell,实现从状态收集到动画播放的无缝衔接。

ooo22的博客 529

Int和Integer有什么区别

Java语言虽然号称一切都是对象,但是原始数据类型除外。Java有8个原始数据类型(primitive type),那就是boolean,int,short,long,char,float,double,byte。Integer是int的包装类,内部有一个private final int value,并且内部提供了基本操作,比如数学运算,int和字符串之间的转换。更重要的是从Java 5中引用了...

jiankangzhu的博客 221

【AI智能体】Dify 搭建发票识别助手操作实战详解

Dify 搭建发票识别专属助手操作实战详解

congge 5549

Java 10 大装 B 写法,看完可以出去吹牛逼了!

想不想学习装 B 式的 Java 骚操作花式写法?没错,本文栈长来教你!1、集合初始化集合的创建、赋值一步到位,想不想学?来,上边跟我一起画个 List,在你下边画一个Map……List...

singwhatiwanna 811

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

m0_58523831的博客 1万+

Java八大基本数据类型

前言:做一下笔记。 Java基本数据类型图: 整数类型:byte 1字节,8位,最大存储数据量是255,存放的数据范围是-128~127之间。 构造方法: public Byte(byte value) 构建了一个新分配的Byte表示指定的byte价值。 参数 value -被 Byte所代表的值 public Byte(String s) throws NumberFormatException 构建了一个新分配的 Byte表示 byte值表示的 String参数。字符串转换成完全由基数10

weixin_43777065的博客 4万+

电子电器架构 --- OEM企标中规定ECU启动时间的目的

电子电器架构 --- OEM企标中规定ECU启动时间的目的

Soly_kun的博客 223

Java中的基本数据类型

Java是一种强类型语言,对于每一种数据都有明确的具体数据类型的定义,会在内存中分配不同的内存空间。因此对于数据类型的学习是在Java学习之路上必不可少的一部分,今天我来简单介绍一下Java的基本数据类型。基本数据类型分为八类:字节类型(byte)、短整型(short)、整型(int)、长整型(long)、单精度浮点数(float)、双精度浮点数(double)、字符型(char)、布尔类型(boolean)。数据类型 变量名 = 初始化值;数据类型 变量名 = 初始化值F;

ibsjsb的博客 2118

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【JAVA】5、Java数据类型的划分及8种基本数据类型

本篇介绍Java数据类型的划分及8种基本数据类型

思跡的博客 9093

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java的基本数据类型有八种

java的基本数据类型有八种: 1)四种整数类型(byte、short、int、long): byte:8 位,用于表示最小数据单位,如文件中数据,-128~127 short:16 位,很少用,-32768 ~ 32767 int:32 位、最常用,-231-1~231 (21 亿) long:64 位、次常用 注意事项: int i=5; // 5 叫直接...

优快云1782747395的博客 1838

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java为何要有基本数据类型

int 和 Integer先聊聊Java数据类型Java为何有两种类型包装类的装箱/拆箱相关面试题: 先聊聊Java数据类型 Java为何有两种类型 数据类型在逻辑上讲只有引用类型就可以了,为何还要基本类型呢? 基本数据类型的包装类是类 ,而类会封装一些属性和方法,比如Integer.parseInt(String)就是将String型的变量转换成Integer类型; Java大多数的类和方法的操作参数都是类 类型的对象,比如ArrayList类中要存储的只能是类类型的数据,比如int类型想要存储在其中

weixin_44176383的博客 1080

java 八种基本数据类型

四类八种基本数据类型 1. 整型 byte(1字节) short (2个字节) int(4个字节) long (8个字节) 2.浮点型 float(4个字节) double(8个字节) 3.逻辑性 boolean(八分之一个字节) 4.字符型 char(2个字节,一个字符能存储下一个中文汉字) 一个字节等于8位,一个字节等于256个数,-128到127 一个英文字母或一

qq_31978495的博客 1万+

JAVA中8种基本数据类型

另外:如果在执行javac的时候中文变成乱码,那就在执行javac的时候加上-encoding UTF-8。·为了区分int和long类型,在long类型变量的初始值之后加L或者l(一般使用L,因为l与1很像)·与C语言不同,java中没有说在多少位操作系统下占多少字节,所以在多少位操作系统下都是一样的。数据类型分为基本数据类型与引用数据类型(数组, String,类,接口...)。·单位转换:1KB=1024byte,1Mb=1024KB,1GB=1024MB。变量在使用之前必须要赋初值,否则编译报错。

tay8799的博客 2184

java的基本数据类型

2 个字节(16 位)。-32768 到 32767(即 -2^15到2^15 - 1 )。:-128 到 127(即-2^7 到 2^7-1)。它通常用于节省内存空间的情况,比如处理一些小范围的整数数据,像文件流中的字节数据操作等。这些基本数据类型是 Java 编程的基础,熟练掌握它们各自的特点、取值范围以及使用场景,对于编写高质量的 Java 代码至关重要。8 个字节(64 位)。4 个字节(32 位)。8 个字节(64 位)。1 个字节(8 位)。2 个字节(16 位)4 个字节(32 位)

m0_73941339的博客 1074

java的基本数据类型有什么特点,java八大基本数据类型

本文收集整理关于java八大基本数据类型的相关议题,使用内容导航快速到达。内容导航:Q1:java中八大基本数据类型有hasdcode值么byte(字节) 1(8位) (bit是比特位,一个字节占8个比特位)shot(短整型) 2(16位)int(整型) 4(32位)long(长整型) 8(64位)float(浮点型) 4(32位)double(双精度) 8(64位)char(字符型) 2(16位...

weixin_39774905的博客 964

Java的基本数据类型

现实生活中,是否所有东西都可以用整数来表示? 答:不行 问:现实生活中,有哪些数据类型? 答:整数,小数,字符,字符串,真假…… 很多…… Java的特点: (1)、变量是一种用来,在内存空间中,存储数据的东西 (2)、任何一个变量,都有它对应的数据类型 Java只有2种数据类型: 引用数据类型(暂时不讲),基本数据类型 数据类型的作用: (1)、规范变量空间的大小 (2)、规范变量空间的内容类型 一、基本数据类型 整数型:byte short int long 浮点型:f.

weixin_64214623的博客 1747

java中为什么要有基本数据类型

简单数据类型代表单值,而不是复杂的bai对象。Java是完全面向对du象的,但简单数据类型不是。他们类似于其他大多数非面向对象语言的简单数据类型。这样做的原因是出于效率方面的考虑。 基本数据类型是用的最频繁的类型。 而且占用存储空间小,可以把它们存入栈中,实现快速的操作。 而他们的封装类Integer等,必需创建实例,在堆中开辟内存,既消耗资源,又耗费时间。 boolean byte short char int long float double 说他们是基本数据bai类型du是因为他们在内存zhi中

Elsa~的博客 2418

JAVA的基本数据类型

有了C语言的基础后,学起JAVA感觉变得轻松不少,毕竟JAVA本就是在C语言和C++的基础上创造的。在给变量赋值的时候准确判断其数据类型极为重要,我们不止要看赋值号的左边还要看赋值号的右边,这关系到我们如何用最小的内存最快的速度来给出最优解。

2301_81156284的博客 1759

java基础:java基本数据类型详解

基本数据类型中,布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错。java程序中可以直接操作基本数据类型,但是某些情况下需要将它们看成对象来处理,这些情况下就需要借助于Java API中基本数据类型对应的包装类来处理了。java是一门面向对象的语言,但是8中基本数据类型不具备面向对象的特征,所以实际使用中很不便所以为java八种基本数据类型提供了对应的包装类。

maligebilaowang的博客 2311

总结Java基本数据类型与引用数据类型

啥是数据类型? 如果把Java程序比作一座高楼大厦,数据类型就是建造这座大厦的小砖头。想要搬好砖头,先了解一下我们的砖头长啥样。 1、基本数据类型介绍 Java程序中一共有8种基本数据类型 基本类型 大小 取值范围 包装器类型 boolean - true/flase Boolean char 16-bit 0~65535 Character byte 8 bits -128~+127 Byte short 16 bits -32768~32767 Short int .

2244
上一篇: java成长之路
下一篇: JDK自带工具查看内存
hejiahaov
博客等级 码龄10年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值