不想当咸鱼 发表于 2020-11-26 12:10

【java】关于new Integer[]和new Integer()傻傻搞不清

如标题,今天看《疯狂java讲义》时,
//定义一个长度为 256 的 Integer 数组
static final Integer[] cache =new Integer[-( - 128) + 127 + 1];
static {
//执行初始化,创建 -128 到 127 的工 nteger 实例,并放入 cache 数组中
for(int i
= 0; i < cache . length ; i++)
cache = new Integer(i -
128) ;

{:301_1003:}{:301_1003:}很好奇,new Integer[]和new Integer()到底表示啥意思,为啥有的表示长度,有的表示元素值,对了,还有new Interger()。


第二个问题:这个你们懂吗{:301_1003:}

LovelyAlan 发表于 2020-11-26 12:17

本帖最后由 LovelyAlan 于 2020-11-26 12:25 编辑

Integer是int的包装类,它和int的区别在于integer是对象,Integer可以赋值null,int是不可以赋值null的. Integer[]就是数组,和你用的 int[] 是一样的. integer() 是调用这个对象的构造函数,创建一个Integer对象,它的默认值是0. 你不必纠结.再给你举个例子
String a = new String();
String b = "value1";
String c = new String("value2");
String[] d = {"1","2"};
//-----------------
Integer a = new Integer();
Integer b = 1;
Integer c = new Integer(1);
Integer[] d = {1,2,3};

不想当咸鱼 发表于 2020-11-26 12:25

LovelyAlan 发表于 2020-11-26 12:17
Integer是int的类,它和int的区别在于integer是对象. Integer[]就是数组,和你用的 int[] 是一样的. integer( ...

哈哈,主要是在Java中经常见(),[],{}的使用,尤其是组合使用的,以前学javascript很少遇到

比如:ArrayList<String> list = new ArrayList<String>(){{add("test1"); add("test2");}};

LovelyAlan 发表于 2020-11-26 12:28

不想当咸鱼 发表于 2020-11-26 12:25
哈哈,主要是在Java中经常见(),[],{}的使用,尤其是组合使用的,以前学javascript很少遇到

比如:Ar ...

()一般为对象的构造函数调用
[]多用于数组
<>多用于泛型

LovelyAlan 发表于 2020-11-26 12:31

第二个问题:
Java中有堆栈的概念,比较对象是用对象的内存地址.比较基本数据类型才是判断值相等.如果要比较对象的值需要使用 equals方法

努力的java小白 发表于 2020-11-26 12:44

LovelyAlan 发表于 2020-11-26 12:31
第二个问题:
Java中有堆栈的概念,比较对象是用对象的内存地址.比较基本数据类型才是判断值相等.如果要比较 ...

Java赋值对象是指向地址吧{:301_1009:},还是说建了一个新对象,{:1_937:}

LovelyAlan 发表于 2020-11-26 13:17

努力的java小白 发表于 2020-11-26 12:44
Java赋值对象是指向地址吧,还是说建了一个新对象,

变量存储了地址,值保存在堆中

soyadokio 发表于 2020-11-26 16:53

本帖最后由 soyadokio 于 2020-11-26 16:54 编辑

先补充点背景知识:
Integer全称是java.lang.Integer,是Java的8种基础类型之一int的包装类。
如果不理解什么是包装类,你就简单地理解Integer是int的加强版,唯一区别是其值能否为null,int的值只能是整数,而Integer的值除了整数以外,还可以是null。

接下来回答你的问题:
1、new Integer[] 表示Integer的数组
在Java中中括号/方括号(即[])表示数组,常见定义方法有:
Integer[] array1 = new Integer; // n为非负整数,表数组长度。下同。
Integer array2[] = new Integer;
2、new Integer() 表示申明一个Integer的对象,类似有字符串的new String(),非基础类型的数据类型都要以new关键字的形式申明。

最后,Interger应该是拼写错误,java里没有这个关键字。

soyadokio 发表于 2020-11-26 16:58

本帖最后由 soyadokio 于 2020-11-26 17:03 编辑

不想当咸鱼 发表于 2020-11-26 12:25
哈哈,主要是在Java中经常见(),[],{}的使用,尤其是组合使用的,以前学javascript很少遇到

比如:Ar ...
双大括号/花括号的写法不建议新手使用,有安全隐患。
附标准写法:
ArrayList<String> list = new ArrayList<String>();
list.add("test1");
list.add("test2");

真实项目中很少使用以上写法,而是采取以下写法:
List<String> list = new ArrayList<String>();
list.add("test1");
list.add("test2");
这种写法可以理解为多态,属于面向接口编程思想。这里可以暂时仅作了解即可。

不想当咸鱼 发表于 2020-11-26 18:12

soyadokio 发表于 2020-11-26 16:58
双大括号/花括号的写法不建议新手使用,有安全隐患。
附标准写法:
ArrayList...

非常感谢您的解答,明白了很多,因为是看源码了解内部实现原理(主要还是为了应付面试){:301_1004:}{:301_1004:}{:301_1004:}
可惜今天的评分已经用完了,{:301_1003:}{:301_1003:}{:301_1003:}


页: [1] 2
查看完整版本: 【java】关于new Integer[]和new Integer()傻傻搞不清