首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我可以用字符串字面值创建一个对象,但是如果泛型出现了,我就不能?

在Java中,字符串字面值可以被用作创建String对象的一种简便方式。这是因为Java编译器对字符串字面值进行了特殊处理,将其自动转换为String对象。例如,当我们使用以下代码创建一个String对象时:

String str = "Hello World";

编译器会将字符串字面值"Hello World"转换为一个String对象,并将其赋值给变量str。

然而,当涉及到泛型时,情况会有所不同。泛型是Java中的一种强大的特性,它允许我们在编译时指定一种类型,并在运行时使用该类型。泛型的类型参数必须是一个具体的类型,而不能是一个对象。

例如,我们无法使用以下代码创建一个泛型对象:

T obj = new T(); // 错误的代码

这是因为在编译时,泛型类型参数T被擦除为Object类型,而Object类型不能直接实例化。

因此,当涉及到泛型时,我们不能使用字符串字面值创建一个泛型对象。相反,我们需要使用泛型的构造函数或工厂方法来创建泛型对象。例如:

T obj = new T(); // 错误的代码

可以替换为:

T obj = new T(); // 使用泛型的构造函数或工厂方法创建对象

总结起来,字符串字面值可以被用作创建String对象的一种简便方式,但在涉及到泛型时,我们需要使用泛型的构造函数或工厂方法来创建泛型对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS数据类型_JS数据类型之引用数据类型

ES6 中新增一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。 谷歌67版本中还出现一种 bigInt。是指安全存储、操作大整数。...(但是很多人不把这个做为一个类型)。 JS数据类型:JS 的数据类型有几种? 8种。...期间一直在纠结 Number(‘as’) 输出 NaN ?NaN == NaN 为什么是 false。其实 js 规定的NaN 不等于NaN。...简单理解就是:undefined 是没有定义的,null 是定义但是为空。 JS数据类型:null 不存在的原因是什么?如何解决?...字符串是不可变的,一旦创建,值就不能改变 要改变某个变量保存的字符串,首先要销毁原来的字符串,然后于用另一个包含的字符串填充该变量。

5.9K31

如何通俗易懂地理解什么叫

这个时候编译是不会报错的,因为集合本来就可以存放多种数据类型,但是以为只有名字,也就是字符串。 ? ①在Collection集合中添加一个String类型的数据。...③现在想统计群里人名都是多少的,以为只有字符串,就会将其强转成String并调用String的lenth方法。...但是不能一篇作文既写成记叙文又写成议论文。 一旦你确定题材(比如说写议论文),那么这篇作文就不能写其他题材(只能写议论文)想写其他题材,那下一篇作文重新写。 所以什么叫?...②类的使用 在创建对象的时候确定,指定好了后这个对象就只能装指定的数据类型如果要换其他数据类型,就要重新创建该类的对象,重新指定类有何好处?...③ArrayList的add方法 add方法参数就是一个,也就是说创建对象时确定的是哪个类型,使用add方法就只能添加这个类型,这就起到了一个千变万化的效果。 2接口 ?

93630

《Kotlin 程序设计》第三章 Kotlin 类型系统第三章 Kotlin 类型系统基本数据类型2.字符类型CharKotlin类型系统参考资料

但是引用地址不同。 1.3面常量 在Kotlin的数字常量可以用十进制、十六进制、指数形式小数、二进制但是没有八进制。...可以用 foreach 循环迭代字符串: for (c in str) { println(c) } 字符串面值 Kotlin 有两种类型的字符串面值: 转义字符串可以有转义字符,以及原生字符串可以包含换行和任意文本...如果你需要在原生字符串中表示字面值 $ 字符(它不支持反斜杠转义),你可以用下列语法: val price = """ ${'$'}9.99 """ Kotlin类型系统 Kotlin有一个统一的类型系统...但是Kotlin中一个都没有,取而代之的是两种其他实现:: declaration-site协变 类型预测(type projections) 首先,让我们想一下,为什么Java需要如此难以理解的通配符...如果类型名称太长,你可以另外引入较短的名称,并使用新的名称替代原类型名。 它有助于缩短较长的类型。

1.3K30

《JavaSE-第二章》之基本数据类型与类型转换

scanf那么坑,之前使用scanf多打了一个空格结果啥都出不来。...,String类定义的变量可以用于指向字符串对象,然后操作该字符串。...⚫ Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。 特点 ⚫ String其实常被称为不可变字符串类型,它的对象创建后不能被更改。...强制类型转换如同将大瓶子中的水倒入到小瓶子里最终瓶子虽然也装满水但是会造成溢出部分水(数据的缺失);隐式转换如同小瓶子中的水倒入到大瓶子里。...b = a; java是强类型语言,会对变量的字面值进行检查,如果面值大于某一类存储的最大值的话是无法编译的体现在idea中就是有一条红色的波浪线。

17341

《编写高质量代码》学习笔记(2)

Constant Pool或String Literal Pool),在字符串池中容纳的都是String字符串对象,它的创建机制是这样的:创建一个字符串时,首先检查池中是否有字面值相等的字符串如果有...对于此例子来说,就是创建一个"詹姆斯"字符串时,先检查字符串池中有没有该对象,发现没有,于是就创建了"詹姆斯"这个字符串并放到池中,待创建str2字符串时,由于池中已经有字符串,于是就直接返回了该对象的引用...那为什么intern方法处理后即又相等了呢?因为intern会检查当前对象对象池中是否存在字面值相同的引用对象如果有则返回池中的对象如果没有则放置到对象池中,并返回当前对象。...String类是不可变的量,也就是创建就不能再修改了,比如创建一个"abc"这样的字符串对象,那么它在内存中永远都会是"abc"这样具有固定表面值一个对象,不能被修改,即使想通过String提供的方法来尝试修改...,也就是说一个类和一个普通类在经过编译后都指向同一节码,比如Foo类,经过编译后将只有一份Foo.class类,不管是Foo还是Foo引用的都是同一节码

1.7K40

初探 TypeScript函数基本类型接口类内置对象

JavaScript 会报错,此时 this 指向 window,但是TypeScript 不会报错,他指定 this 会在哪个对象上面调用 基本类型 ?...是数组的索引类型,: 后面表示是一个数字组成的数组(这样表述好像还有点怪,欢迎指正) 元组 Tuple 元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同(数组合并相同类型的对象,而元组合并不同类型的对象...在软件工程中,我们不仅要创建一致定义良好的 API,同时也要考虑可重用性,组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供十分灵活的功能 用创建可重用的组件...let myIdentity1:{ (arg:T):T} = identity 复制代码 可以使用带有调用签名的对象字面量来定义型函数,我们可以将对象字面量拿出来作为一个接口,将一个参数当做整个接口的一个参数...如果你有相关的开发经验,想像你学习,交流哈哈,需要一个老司机带哈哈

7.3K31

常量与变量

字符串就是双引号""的内容叫做字符串,包含类似于字符常量的字符:普通的字符,转义序列和通用的字符。  ---- 转义字符 当然如果你觉得这个字符比较长的话其实也可以用空格符分开来,进行分析!...,我们这里PAL左边变量被const所给修饰的量,左值指定const的对象,所以它是不能被修改的值。...那么为什么叫常变量呢?因为它具有常属性—常属性就是不能被改变的属性,但是其实它的本质上还是变量!举个例子给大家看下:所以还是叫做常变量!...变量的定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。 变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表。...数值的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句: int age = 17; 但是下面的这个就是错误的,会生成编译器上的错误!

69220

Kotlin中的函数

函数还可以用中缀表示法调用,当他们是成员函数或扩展函数,只有一个参数,用 infix关键标注 // 给 Int 定义扩展 infix fun Int.shl(x: Int): Int { …… } /...例子如下: 在Android开发中,打印信息 //通过关键inline来定义内联函数。 //中的 reified关键告诉编译器,这个是可以具体拿到值的。...可以实现dsl风格的代码全靠它 Kotlin 提供使用指定的 接收者对象 调用函数字面值的功能。 可以调用该接收者对象上的方法而无需任何额外的限定符,可以任意调用接受者的方法和属性。...(other: Int) -> Int //该函数字面值可以这样调用,就像它是接收者对象上的一个方法一样: 1.sum(2) 上面那段还是有点不大理解 匿名函数语法允许你直接指定函数字面值的接收者类型...当接收者类型可以从上下文推断时,lambda 表达式可以用作带接收者的函数字面值。 推断上下文是什么意思?

2.3K40

BATJ面试必会之常见Java基础面试题(附答案)

根据你对这个问题的回答情况,你会得到一些后续提问,比如为什么是由类型擦除来实现的或者给你展示一些会导致编译器出错的错误代码。请阅读的Java中是如何工作的来了解更多信息。...类型必须用限定内的类型来进行初始化,否则会导致编译错误。另一方面表示非限定通配符,因为可以用任意类型来替代。更多信息请参阅的文章中限定通配符和非限定通配符之间的区别。...在本段出现的连接中可以找到更多信息。 (5)如何编写一个方法,让它能接受参数并返回类型?...对任何一个不太熟悉的人来说,这个Java题目看起来令人疑惑,因为乍看起来String是一种Object,所以List应当可以用在需要List的地方,但是事实并非如此。...这可能是Java面试题中最简单的一个,当然前提是你要知道Array事实上并不支持,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为

87120

C# 7.0简而言之 -- 02. C#基础 (1)

预定义类型 int就是一个预定义类型, 它是整数类字面值的默认类型, 如果这个字面值不超过int的上下限的话....而new操作符可以创建一个自定义类型的实例: UnitConverter feetToInchesConverter = new UnitConverter (12); 在使用new操作符初始化对象之后...: 值类型 引用类型 类型参数 指针类型 值类型包扩大多数内置的类型(所有的数值类型, char, bool), 还包括自定义的struct和enum(枚举)类型....下例中, 如果Point是类而不是struct: [image.png] [p1, p2是指向同一个对象的两个引用] Null 一个引用可以被赋值为null, 表示该应用没有指向任何一个对象: [image.png...= '\u00A9'; char的转型 char可以隐式的转换为数值, 但是要求该数值至少可以容纳.无符号short的大小.

1K120

关于JS字面量及其容易忽略的12个小问题

var n16 = 0x11 console.log(n16) //17 var n17 = 0xw console.log(n17) //报错 二进制 二进制字面值的前两位必须是0b,如果出现除0、1...String()重新创建一个对象,所以调用方法可以,调用类似于方法的属性(例如length)也可以,但是使用动态属性不可以,因为在内存堆里已经不是同一个对象。...想象这个场景可能是这样的: 程序员通过字面量创建一个字符串对象,并把一个包裹交给了他,说:“拿好了,一会交给我”。...例如: let message = `Hello world` //使用模板字符串字面量创建一个字符串 使用模板字符串,原来需要转义的特殊字符例如单引号、双引号,都不需要转义: console.log...JS的字面量对象,是一种简化的创建对象的方式,和用构造函数创建对象一样存在于堆内存当中。对象面值是封闭在花括号对({})中的一个对象的零个或多个"属性名-值"对的元素列表。

3K20

【笔记】《深入理解C++11》(上)

, 如果定义常量左值引用构造也能正确执行, 只不过会变为拷贝形式 常量右值引用存在但是没有实际用途 std::move()能强制使一个左值变为右值, 但是不会改变其生命周期 右值引用本身是个左值,...新增ReturnType operator "" X(Args)作为后缀操作符, 其允许我们将字符串面值加上自定义的后缀X来转换为目标字面类型 但是对于这个操作符的编写有相关的参数限制: 字面值是整型...或字符串面值字符串, 参数是字符串和size_t标识处这个const char*的长度 字面值是字符, 参数只能是单个字符 为了避免和内置的字面值后缀混淆, 后缀名最好以下划线开头 Plain Old..., 所以不会降低效率 标准库中的std::result_of()内部的type命名本质就是decltype decltype有所谓的推导四原则: 如果目标是一个没有带括号的标记符表达式(也就是除去关键...也就是decltype一个const对象时, 尽管对象本身的const类型能被获取, 但是从这个对象中取出成员的const会丢失 5 提高类型安全 强类型枚举 普通的枚举enum代表对应到整数值的一些名字

1.8K20

精选Java基础面试120题

类中的成员需要私有的时候使用private关键 特点:是一个权限修饰符。可以修饰成员(成员变量和成员方法) 被private修饰的成员只在本类中才能访问 2.13 为什么要有 this 关键?...this 关键的含义? this用来解决成员变量与局部变量重名问题 this关键代表的是本类对象引用;谁调用,this就代表谁. 2.14 final 关键是什么意思,可以修饰那些成员?...也被称为参数化类型,可以把类型当做参数一样传递过来,在传递过来之前不明确,但是在使用的时候就就明确。...的好处 提高了程序的安全性 将运行期遇到的问题转移到了编译期 省去了类型强转的麻烦 的常见应用 方法 接口 2.21 如何编写一个方法,让它能够接受参数并返回类型?...5个对象 a b c ab abc 因为字符串的特点是一旦被创建就不能被改变,所有在使用常量进行相加的时候,都是在创建新的字符串对象,最后在把字符串"abc"这个常量值赋值给引用变量s 4.2 如何实现

76220

java中的强迫症患者

但是理想很丰满,现实很骨感,如果对于一个集合添加的元素没有约束,可以随意往一个集合里面放任何类型的对象,会发生意想不到的问题。 为什么 ? 双十一你剁手没?...放进去的明明就是一个商品类型Commodity呀,为什么拿出来的时候变成Object?...是什么 没有的时候,集合就是个强迫症患者,什么强迫症?元素类型不统一就不能清空购物车,不能清空购物车就浑身难受,心浮气躁,上蹿下跳。而出现,恰恰治好了集合的强迫症。...的语法变化 在java5的时候,有治好了集合的强迫症,List,Set,Map等集合都可以使用来规范元素的类型。但是有个缺点就是写起来太啰嗦。...在java7之前,不好意思,你还真得老老实实写一遍,但是java7的出现,可以让我们偷偷懒。不需要在实现的时候再写一遍类型。

54340

TypeScript进阶 之 重难点梳理

但是为什么都会写 ts ,却看不懂别人的代码呢?」 这!就是入门与进阶之隔。也是本文的目的所在。...如果不指定类型,就在定义的之后指定一个默认的类型 myLog(1) 「我们也可以把变量理解为函数的参数,只不过是另一个维度的参数,是代表类型而不是代表值的参数。」...而 T[K]就是去对象的 T 下的key: K的 value infer infer 关键最早出现在 PR 里面,「表示在 extends 条件语句中待推断的类型变量」 是在 ts2.8 引入的,在条件判断语句中...由于 keyof 关键已经介绍。其实就是可以用来取得一个对象接口的所有 key 值。...为什么不能判断类型或者可选参数呢?

3.8K20

.NET深入解析LINQ框架(一:LINQ优雅的前奏)

按照常理说方法的形参里面定义一个的委托,他们的形参类型都是一样的占位符,但是如果使用带有形参的方法作为委托的参数的话是无法进行类型推断的,然后使用无参数的方法作为委托参数是完全没有问题的。...但是如果使用GetOrderListByModel作为GetModelList(Func GetFunc)重载版本的方法时就不能真确的推断出类型...小结:按照这个分析,似乎对于方法的类型推断只限于Lambda表达式?如果不是为什么多了参数就无法进行类型推断?...而如果我们使用字符串的方式来表达逻辑的结构,那么我们只能在运行时才能知道它的正确性,这样的正确性是很脆弱的,不知道在什么样的情况下会出现问题。...什么叫整体的表达式,就是说完全可以用一个表达式对象来表示它,这里就是我们的LambdaExpression对象

1.8K31

Java 学习笔记(1)——java基础语法

但是万事逃不过真香定律,在工作之后,慢慢接触Java,也了解了java,其实Java并不像我想想的那么简单。但是心里一直抗拒学它。...答案是不行的,由于main函数是一个入口函数,一切都从它开始,如果它是一个类函数,那么势必要定义一个类的对象然后再调用对象的main方法,可是既然main是程序的开始,请问如何在调用main之前定义对象呢...在Java中一切即对象,它强制你采用面向对象,这也是当时拒绝学java的一个理由,认为它太死板。...常量与变量 常量在java中一般是指那种用字面值表示出来的量比如说 整型的1,浮点的1.234, 字符 'A' 字符串 'hello world',或者是用关键 const 定义的。...java中的char占两个字节,所以在C/C++中会将需要一个字节一个字节处理的缓冲定义为char数组,而在java中就不能这么干了,因为它的char占两个字节,java中对于这种情况一般是定义为byte

47220

Swift基础语法(三)

执行打印结果为: 想吃? 给你吃? 值类型在实例方法中修改属性和调用方法 值类型(比如结构体)默认情况下不能在实例方法中修改属性,但是我们可以在函数前面放一个mutating关键来实现。...,这些方法仅仅是参数的类型不同,是不是针对每一个类型都需要写一个转换方法呢? 此时就需要用到。...协议中使用,是通过 associatedtype 关键。...,是通过关键 associatedtype 来实现的 与类、结构体或者枚举中的一样,协议中的也可以进行类型约束(通过继承或者遵循协议的方式) 异常 如何来描述一个异常 在Swift中,任何一个遵从...方式,该方式不处理异常,如果出现异常,则会返回一个nil;没有出现异常则正常返回。 // 最终返回结果为一个可选类型 let result = try?

1.9K40

Java字符串池(String Pool)深度解析

我们知道,在Java中有两种创建字符串对象的方式:1)采用字面值的方式赋值 2)采用new关键新建一个字符串对象。这两种方式在性能和内存占用方面存在着差别。...采用字面值的方式创建一个字符串时,JVM首先会去字符串池中查找是否存在"aaa"这个对象如果不存在,则在字符串池中创建"aaa"这个对象,然后将池中"aaa"这个对象的引用地址返回给字符串常量str,...采用new关键新建一个字符串对象时,JVM首先在字符串池中查找有没有"aaa"这个字符串对象如果有,则不在池中再去创建"aaa"这个对象,直接在堆中创建一个"aaa"字符串对象,然后将堆中的这个"...aaa"对象的地址返回赋给引用str3,这样,str3就指向堆中创建的这个"aaa"字符串对象如果没有,则首先在字符串池中创建一个"aaa"字符串对象,然后再在堆中创建一个"aaa"字符串对象,然后将堆中这个...从上面的例子可以看出,字符串常量在编译时计算和在运行时计算,其执行过程是不同的,得到的结果也是不同的。我们来看看下面这段代码: ? 代码输出如下: ? 为什么出现上面的结果呢?

72320
领券