精华内容
下载资源
问答
  • java原始数据类型的包装类 java系统自定义原始封装类
  • Java原始数据类型

    千次阅读 2017-03-22 09:00:39
    Java定义了八种基本类型数据:byte,short,int,long,char,float,double和boolean。 基本类型通常被称为简单类型。 这些基本类型可以分为四组: 整数 - 包括:byte,short,int和long,用于整数有符号...

    Java定义了八种基本类型的数据:byteshortintlongcharfloatdoubleboolean

    基本类型通常被称为简单类型。
    这些基本类型可以分为四组:

    • 整数 - 包括:byteshortintlong,用于整数有符号数字。
    • 浮点数 - 包括floatdouble,表示具有分数精度的数字。
    • 字符 - 包括字符,表示字符集中的符号,如字母和数字。
    • 布尔(Boolean) - 此组包括布尔值,它是表示 true/false 值的特殊类型。

    可以使用这些类型来构造数组或自己的类类型。
    基本类型表示单个值,而不是复杂对象。 虽然Java完全是面向对象的,但原始类型不是对象。
    原始类型具有显式范围和数学行为。

    强类型

    Java是一种强类型语言。每个变量都有一个类型,每个表达式都有一个类型,每个类型都严格定义。检查所有分配的类型兼容性。

    Java不会自动强制或将有冲突类型的进行转换。Java编译器检查所有表达式和参数,以确保类型是兼容的。

    展开全文
  • java原始数据类型案例

    千次阅读 2012-02-22 00:55:44
    提到java原始数据类型,可能很多java程序员都觉得很简单,可是你真的对java原始数据类型很了解吗?好像不一定,我相信下面的一些程序即使有过很长开发经验的程序员也不一定能解释的很清楚。当然,我也依然在学习的...

    提到java原始数据类型,可能很多java程序员都觉得很简单,可是你真的对java原始数据类型很了解吗?好像不一定,我相信下面的一些程序即使有过很长开发经验的程序员也不一定能解释的很清楚。当然,我也依然在学习的过程中,有什么地方解释的不正确欢迎指正。

    先来个简单的小例子:

    public class PrimitiveDataTypeTest {
    	public static void main(String[] args) {
    		short s = 2;
    	}
    
    }


     

    上面的例子很简单,就是对一个short类型变量s赋初值。但是为什么没有任何错误呢?常量值2不应该是int类型的吗?把int类型的 值转换成short类型的值不是应该强制转换的吗?为什么把int类型的值转换成short类型的值没有任何错误呢?下面是这部分代码的字节码:

    public com.ygc.PrimitiveDataTypeTest();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   return
    
    public static void main(java.lang.String[]);
      Code:
       0:   iconst_2
       1:   istore_1
       2:   return
    
    }
    


    可以看到,字节码中只调用了iconst_2(把2压入栈顶)和istore_1(把栈顶的内容存入s中)。因为赋值过程中只存在int类型的常量值,所以编译器知道如何处理。(这部分我也不是很清楚啊,还请大侠帮忙解释一下。)

    下面再来看一段代码:

    public class PrimitiveDataTypeTest {
    	public static void main(String[] args) {
    		short s = 2;
    		s = (short) (s + 1);
    	}
    
    }


    上面的代码中在计算 s的值时必须对结果进行强制类型转换,而如果写成下面这样则会出现编译错误:

    public class PrimitiveDataTypeTest {
    	public static void main(String[] args) {
    		short s = 2;
    		s = s + 1;
    	}
    
    }


    这是因为+操作符有两个操作数,JVM指令中+操作符的最小类型是int,其它的byte、short、char都以iload,iadd来操作,然后用i2b,i2s,i2c转换回去,因为+操作在两个数中间,所以如果不手动转换,编译器根本不知道你要转换成第一个操作数类型还是第二个操作数类型。这段代码的字节码如下:

    Compiled from "PrimitiveDataTypeTest.java"
    public class com.ygc.PrimitiveDataTypeTest extends java.lang.Object{
    public com.ygc.PrimitiveDataTypeTest();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   return
    
    public static void main(java.lang.String[]);
      Code:
       0:   iconst_2
       1:   istore_1
       2:   iload_1
       3:   iconst_1
       4:   iadd
       5:   i2s
       6:   istore_1
       7:   return
    
    }

    而下面的代码却是可以正确执行的,不需要强制类型转换:

    public class PrimitiveDataTypeTest {
    	public static void main(String[] args) {
    		short s = 2;
    		s += 1;
    	}
    
    }

    通过查看它的字节码发现,编译器自动执行了类型转换:

    Compiled from "PrimitiveDataTypeTest.java"
    public class com.ygc.PrimitiveDataTypeTest extends java.lang.Object{
    public com.ygc.PrimitiveDataTypeTest();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   return
    
    public static void main(java.lang.String[]);
      Code:
       0:   iconst_2
       1:   istore_1
       2:   iload_1
       3:   iconst_1
       4:   iadd
       5:   i2s
       6:   istore_1
       7:   return
    
    }

    所以说看似简单的原始数据类型并不简单,还需潜心研究。上面的描述还不是很详细,因为我也是刚刚开始这方面的研究,以后还会不断完善。如有哪里不对,还请多多指教。

    展开全文
  • Java程序员都要懂得知识点:原始数据类型

    万次阅读 多人点赞 2021-04-02 11:45:03
    java原始数据类型有short、byte、int、long、boolean、char、float、double。原始数据是未处理的或简化的数据,它构成了物理存在的数据,原始数据具有多种存在形式,例如文本数据、图像数据、音频数据或几种类型数据...

    本文分享自华为云社区《Java知识点问题总结之原始数据类型》,原文作者:breakDraw。

    java原始数据类型有short、byte、int、long、boolean、char、float、double。原始数据是未处理的或简化的数据,它构成了物理存在的数据,原始数据具有多种存在形式,例如文本数据、图像数据、音频数据或几种类型数据的混合。以为关于Java原始数据类型的相关知识点总结。

    Q:java中数据类型大小会和平台是32位、64位相关吗?

    A:不相关,虚拟机原因平台兼容

    Q:java中解析数据时,需要考虑处理器的大小端问题吗?(即0x1234的12是放在高地址还是低地址)

    A:不需要。java由于虚拟机的关系,屏蔽了大小端问题,需要知道的话可用 ByteOrder.nativeOrder() 查询。在操作ByteBuffer中,也可以使用 ByteBuffer.order() 进行设置:。

    Q:java中short、int 、long的字节分别是多少?
    A:2、4、8

    Q: float、double是多少字节?
    A:4、8

    Q: java中byte、char是多少字节?C++中char是多少字节?
    A : java中是1和2, C++中char是1

    Q: java中boolean类型的大小?
    A: bool类型无空间大小(来自java编程思想)

    根据http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html官方文档的描述:

    boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its “size” isn’t something that’s precisely defined.

    布尔类型:布尔数据类型只有两个可能的值:真和假。使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息,但是它的“大小”并不是精确定义的。

    贴一下书中关于数据类型的描述:

    Q: 不可变类型有哪几种?
    A: short、int、long、float、double、byte、char、boolean的 包装类型, 以及String,这9种属于不可变类型。(这只是部分,还有其他的不可变类)

    • 不可变类型概念:里面的值的内容变了,对应的内存地址也会变化。

    Q:类里的成员如果是基本数据类型, 那么会自动初始化吗?初始化成什么?
    A: 会, 初始化为0或者false。

    Q: java中局部变量没初始化,会报错吗?
    A: 会

    Q: 布尔类型可以强制转化成其他类型吗?
    A : 不能。 boolean b = 1或者boolean b = “true” 是不可以的

    Q: 什么时候不能隐式转化?
    A: 如果会丢失精度,则不能隐式转化,比如long转int或者double转long这种。 编译器会强制我们使用强制转化

    Q: 8种原始数据类型的类型优先级排序是?
    A:
    (byte/short/char)<int<long<float<double
    即隐式转换都是从低往高转。

    Q:下面哪个是错误的?

    A:
    B选项是错误的。
    因为2个byte类型变量相加的时候,会自动转换成int类型,右边的int类型赋值给short类型便会报错。(好冷的知识)

    Q:

    float f = 1.1;

    有错吗?
    A:
    float浮点后面要加f。加f就代表是float类型,否则就是double类型浮点。

    float f = 1.1f;
    double d1 = 1.1;

    Q: 布尔类型可以做加减乘除吗?
    A : 不能

    Q: Integer N = 0; int n = N; 这时候会发生什么?
    A: 自动拆包

    Q:整型包装类型的比较,下面输出啥?

    Integer num1 = 128,num2 = 128;
    System.out.println(num1==num2);

    A:
    输出false。
    值的范围在-128~127的时候Integer可以直接用==比较大小,但是超出这个范围时,==就不管用了,要用equals。
    大致原因是在那个范围,Integer的对象会直接用缓存对象,所以地址都相同。
    不在那个范围,Integer对象会新生成1个对象,所以地址不同。

    • 另一个注意点: “==” 对于对象来说,比较的是地址。

    Q: java中哪2个类可以支持任意精度的整数 和任意精度的浮点数?
    A: BigInteger和BigDecimal

    • 这2个也属于不可变类。

    Q: java的数组一定需要我们手动初始化吗?
    A: 不需要,数组元素会自动初始化为null或者0或者false。

    Q:java支持C++里的运算符重载吗?
    A: 不支持

    Q: if(a=b) 可以吗?
    A: 不行,不能在条件表达式中放入赋值操作。除非a和b都是boolean类型。

    Q:浮点数相等的比较方式
    A:相等的话要像下面这样

    if(Math.abs(a-b))<1E-6F)

    如果用浮点的a==b或者a!=b做while循环退出判断,可能会导致死循环

    Q:下面的数组声明哪几个是对的?
    A. char[] chr1 = new char[]{‘A’,‘B’,‘C’};
    B. char[] chr2 = new char[3]{‘A’,‘B’,‘C’};
    C. char[][] chr3 = new char[][10];
    D. char[][] chr4 = new char[10][];
    E. char[] chr5 = new char[3];

    A:ADE是对的。

    § 字符串

    Q: StringBuffer和StringBuilder的区别:
    A:
    StringBuffer是线程安全的,但是慢
    StringBuilder是线程不安全的(即可以多个线程同时读取他的内容),但是快。

    Q:String s = “123”+“456”+“789”;对于这种静态的拼接,用StringBuffer去拼接比用String去拼接要快,对吗?
    A:错,反编译代码后,我们发现代码是
    String s = “123456789”;
    因为对于静态字符串的连接操作,Java在编译时会进行彻底的优化,将多个连接操作的字符串在编译时合成一个单独的长字符串。
    因此要注意StringBuffer/Builder的适用场合: for循环中大量拼接字符串。
    如果是静态的编译器就能感知到的拼接,不要盲目地去使用StirngBuffer/Builder
    PS:

    Q:下面输出什么结果?为什么?

    String s1 = "Hello";
    String s2 = "Hello";
    String s3 = "Hel" + "lo";
    String s4 = "Hel" + new String("lo");
    String s5 = new String("Hello");
    String s6 = s5.intern();
    String s7 = "H";
    String s8 = "ello";
    String s9 = s7 + s8;
     
    System.out.println(s1 == s2);  // true
    System.out.println(s1 == s3);  // true
    System.out.println(s1 == s4);  // false
    System.out.println(s4 == s5);  // false
    System.out.println(s1 == s6);  // true
    System.out.println(s1 == s9);  // false

    Q:
    println(s1 == s2)输出 true
    println(s1 == s3)输出 true
    println(s1 == s4)输出 false
    println(s4 == s5)输出 false
    println(s1 == s6)输出 true
    println(s1 == s9)输出 false

    • 字符串的==操作比较的是引用地址。
    • 如果是直接写死在代码里的常量字符串,则地址是固定的,都在常量池中。
    • 写死的常量字符串拼接,依旧会作为常量放入常量池中。(常量池就是指,程序编译的时候,就已经知道了这个字符串)
    • 如果是String类型的,则引用地址是堆中的string对象地址,而非常量池中地址。(因为程序编译的时候,string里的内容不一定是确定的,因此不可能会放到常量池中)
    • 因此涉及string拼接的,都是和原先常量不等。s7和s8已经属于string对象,所以二者不属于常量拼接。
    • intern会试图把字符串放入常量池。

    具体原因可见:https://www.cnblogs.com/syp172654682/p/8082625.html

    § 可变参数

    Q: 方法重载时,如何选择可变参数和固定参数?像下面输出啥:

     public static void main(String[] args) {
            f(1);
        }
     
        public static void f(int ...a){
            System.out.println("可变参数方法:"+Arrays.toString(a));
        }
     
        public static void f(int a){
            System.out.println("固定长度 参数方法:"+a);
        }

    A:输出固定长度参数方法。

    原则:如果重载方法中,固定参数方法能满足,优先用固定参数方法,不满足时再去选择可变参数方法。

    § 参考资料:

    https://www.cnblogs.com/syp172654682/p/8082625.html

     

    点击关注,第一时间了解华为云新鲜技术~

    展开全文
  • Java原始数据类型

    千次阅读 2013-01-12 23:33:28
    Java编程语言为8个原始基本类型: boolean,char,byte,short,int,long,double,flout 逻辑类:boolean  boolean truth = true;  注意:在整数类型和boolean之间无转换计算.有些语言(特别强调的是C和C++)...
    Java编程语言为8个原始基本类型:
    boolean,char,byte,short,int,long,double,flout


    逻辑类:boolean
        boolean truth = true;

        注意:在整数类型和boolean之间无转换计算.有些语言(特别强调的是C和C++)允许将数字值,转换成逻辑值,这在Java编程语言中是不允许的;boolean类型只允许使用boolean值.

        if(a==2)条件表达式返回的是boolean.

    文本类:char和String
         char代表一个16-bit的Unicode字符.
         必须包含用单引号(')引用的文字.
         '\t' 一个制表符;
         '\u????' 一个特殊的Unicode字符,????应严格使用四个16进制数进行替换.


    String-不是原始类型,而是一个类,它被用来表示字符序列.(与C和C++不同String不能用\0作为结束);
          -具有双引号引用的文字.
          注意:String s = "Good, morning \n";                //"\n"表示一个换行
          System.out.println(s);         //这里打印后会换2行


    整数类:byte,short,int,long(注意java中整数类型都是带符号的)
    1,采用3种进制十,八,十六进制
    2 表示十进制的2
    017 首位的0,表示这是一个八进制数
    0x1A 前2位的0x,表示这是一个16进制数


    2,具有缺省int(整数类文字属int类型,除非在后面直接跟一个字母"L")."L"表示一个long值


    浮点(float和double):
    浮点变量可用float或double来声明.如果一个数字包括小数点或指数部分,或者在数字后面带有字母F或f,D或d,则该
    文字为浮点.
    -缺省为double
    -浮点文字包括小数点或下列各项之一
    -E或e 增加指数值
    -F或f(float) 32bits
    -D或d(double) 64bits


    System.out.println(123.4E+306D);//=1.234E308???


    类型自动转换

    ...................char
                  ........↓
    byte→short→int→long
                 ..... ... ↘   
            .......float →  double

    另外long int 和float double有可能损失精度


    System.out.println((12.0==12));
    12.0浮点型double 12数值型int 
    int→double自动转换 所以结果为真 返还布尔值TRUE


    System.out.println(('a'==97.0));
    "a"字符char 97.0为浮点值double
    char→int→double自动转换
    a的进制表示就是97
    97==97.0所以结果为真 返还布尔值TRUE

    展开全文
  • Java原始数据类型与其包装类

    千次阅读 热门讨论 2018-04-01 21:23:40
      Java语言中默认定义了8个原始数据类型,大致可以分为4类: 整型:包含byte、short、int、long 浮点型:float、double 布尔型:boolean 字符:char   这8个基本的数据类型如果在声明的时候没有初始化,...
  • 最近在看一些java的基础知识,有一点问题是这样的:在java中char 可以存储一个汉字吗?相信90%的java程序员都知道答案,但是有很多人不...String类型在存储一个汉字的时候,使用不同的编码格式,所需的字节数是不一样的
  • Java原始类型和引用类型

    千次阅读 2016-06-05 16:30:47
    Java中提供了两种数据类型原始类型和引用类型。 本文主要针对这两种类型进行说明,便于在实际开发过程中正确选择合适的数据类型。 1. 原始类型  Java中的原始类型是不同于类的基本数据类型,包括如下8种...
  • Java中的原始类型原始封装类型

    千次阅读 2019-08-05 15:36:42
    在写Java代码的过程中,一直对Java提供的一些类参数又疑问,今天查了一下,进行了解学习。 type argument cannot be of primitive type 问题: Java中什么是原生类型?...比如:Int是java原始数据类型,In...
  • Java long数据类型

    万次阅读 2017-03-22 09:04:19
    long数据类型是64位有符号的Java原始数据类型。当对整数的计算结果可能超出int数据类型的范围时使用。 long数据类型范围是-9,223,372,036,854,775,808至9,223,372,036,854,775,807(-2^63至2^63-1)。 long数据...
  • public static boolean isArray(Object array) { if (array instanceof Object[]) { return true; } else if (array instanceof boolean[]) { return true; } else if (array instanceof byte[]) { ...
  • JAVA基本数据类型与引用数据类型

    万次阅读 多人点赞 2016-11-09 09:30:34
    基本数据类型 对象类型 在栈中进行分配 在堆中进行分配 基本类型之间的赋值是创建新的拷贝 对象之间的赋值只是传递引用 “==”和“!=”是在比较值 “==”和“!=”是在比较两个引用是否...
  • JAVA基础数据类型

    千次阅读 2009-12-21 14:11:00
    Int是java原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 boolean -->Boolean char --->Character byte -->Byte short -->Short int -->Integer long -->Long ...
  • Java short数据类型

    万次阅读 2017-03-22 09:05:41
    短(short)整型数据类型是16位有符号Java原始整数数据类型。 其范围是-32768至32767(或-2^15至2^15-1)。 short整型数据类型没有字面量。但是,可以将任何位于short(-32768到32767)范围内的int数值分配给一个短...
  • Java byte数据类型

    千次阅读 2017-03-22 09:05:05
    字节(byte)数据类型是8位有符号Java原始整数数据类型。其范围是-128至127(-2^7至2^7-1)。 字节类型是Java中可用的最小整数数据类型。当程序使用其值在-128到127范围内的大量变量或在文件或网络中处理二进制数据时,...
  • JS中5种原始数据类型

    千次阅读 2017-11-27 09:51:59
    1.js中5种原始数据类型  number:整数/小数/NaN  string:  boolean:  null:  undefined: 2.js中会存在自动类型转换:当js引擎发现给的数据类型和需要的数据类型不一致时,会自动类型转换  其他类型...
  • Java基本数据类型

    万次阅读 多人点赞 2014-05-31 12:24:14
    Java语言是静态类型
  • Java的基本数据类型

    万次阅读 2020-05-22 00:23:23
    1. Java 的基本数据类型都有哪些各占几个字节
  • type argument cannot be of ...这个错误是 原始数据类型原始数据类型的封装类型的问题 该使用封装类型的地方,我们使用了原始数据类型,开发工具会自动提示type argument cannot be of primitive type的错误。 ...
  • Java的基本数据类型Java的变量类型

    千次阅读 2016-01-15 20:35:37
    一、Java 基本数据类型 1、什么是变量? 变量就是用来储存值而保留的内存位置。这就意味着当你创建一个变量时就会在内存中占用一定的空间。 基于变量的数据类型,操作系统会进行内存分配并且决定什么将被储存在保留...
  • Java数据类型

    千次阅读 2012-09-14 16:42:36
    数据类型是许多程序开发语言中重要的概念,虽说有着强类型和弱类型之分别,但对于面向对象的Java语言就是一种强类型语言。采用这种方式,在一定程度上保证了Java的安全性与健壮性。本文就是说说Java数据类型以及...
  • 理解Java自定义类作为数据类型——引用数据类型

    千次阅读 多人点赞 2020-01-11 20:01:48
    前言:Java数据类型按照类型可分为基本数据类型(byte、short、int、long、double、float、char、boolean)和引用数据类型(类(class)、接口(interface)、数组(array)),8种基本数据类型相信只要接触过Java就...
  • Java 7之基础类型第1篇 - Java数据类型

    万次阅读 2013-11-18 08:55:20
    一、数据类型 Java主要有如下几种数据类型
  • Java 基本数据类型取值范围讲解

    千次阅读 2016-09-08 11:47:09
    java中的类型概念名的说法不一、让我很是迷茫,我个人的...1) 原始数据类型,简单类型,基本类型都是一个含义; 2)复合类型,扩展类型,复杂类型、引用类型都是一个含义; 3)浮点类型,实数、实型都是一个含义
  • java输出变量数据类型At SitePoint we’re always looking to expand the range of topics we cover. Lately, we’ve set our sights on exploring the world of Java. If you’re a strong Java developer who ...
  • Java基本数据类型的Class问题

    千次阅读 2018-12-10 22:13:50
    原始Java类型( boolean , byte , char , short , int , long , float和double ),和关键字void也表示为类对象。 ” 我们知道对于对象来说,可以直接使用对象.getClass()、Class.forName(className)或者...
  • Java中引用类型原始类型的区分

    千次阅读 2011-07-31 12:26:50
    Java 提供两种不同的类型:引用类型原始类型(或内置类型)。另外, Java还为每个原始类型提供了封装类(Wrapper)。如果需要一个整型变量,是使用基本的int 型呢,还是使用 Integer 类的一个对象呢?如果需要声明...
  • 万剑归宗,到底什么是Java的基本数据类型啊?

    千次阅读 多人点赞 2021-06-14 21:40:52
    经常听人们说Java语言的数据类型分为基本数据类型和引用数据类型。那有人要问了,到底什么是数据类型,什么是基本数据类型,什么是引用数据类型啊?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 218,156
精华内容 87,262
关键字:

不是java的原始数据类型

java 订阅