/**
今天在一个blog上面看到一个赋值运算符,拿过来分析下
*/
var x = y = new String("abc");
x.x = x = "def";
console.log(x,y,x.x,y.x);
/*
说下结果
结果是
dev
abc
undefined
def
但是看了对应文章的分析,我感觉分析的有点问题,所以拿过来分析下
对方blog的地址是http://lichaosoft.net/?p=89
要了解的点
1:赋值运算符是从右侧到左侧,所以以下的是相等的
x = y = "abc" 实际上就是 x = (y = "abc")
2:new String("abc")的类型,是对象,所以赋值的时候应该是传引用,不是传值
所以上面例子中的var x = y = new String("abc");
我们的结论应该是x和y应该是同变化的,修改x的时候y会同时变化。
3:比较关键的一个地方
x.x = x = "def";
这个东西最应该注意的地方是首先干吗?
他会首先是定义一个值x.x变量,分解的话可以理解为这样
var x.x = null; x对象改变了,加了一个变量值,那么y相对应的改变y.x = null
x = "def";x对象被转化为了string类型了,基本数据类型,所以y不会改变数据类型,这是string的特性,string的引用是一种不可被改变值的对象,比较特殊,new String("abc")其实就是一个类似数组的对象,里面也是按索引0开始的一个类似数组,已经存在的索引是无法修改的,也无法删除。
x.x = x; 因为x已经变成了基本数据类型,所以x.x是是不能操作的,但是x.x实际上又是y.x的一个引用,所以y.x会变成def
*/
分享到:
相关推荐
对象的赋值 如果对一个类定义了两个或多个对象,则这些同类的对象之间可以...对象赋值的一般形式: 对象名1=对象名2; 注意,对象1和对象2必须是属于同一个类 =========示例代码1.1=============== 代码如下:#include
在Java编程语言中,String类型变量的赋值问题是一个重要的概念,主要涉及到对象引用和不可变性。这里我们将深入探讨这两个关键点。 首先,Java中的String类是不可变的,这意味着一旦创建了一个String对象,就不能...
### Java String对象的经典问题 #### 一、String 类与对象机制概述 在Java中,`String`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。`String`类是不可变的(immutable),这意味着一旦一个`String`...
使用字面值赋值方式创建的 String 对象会被存储在 String 池中, String 池是一个特殊的存储区域,用于存储字符串常量。使用 new 关键字创建的 String 对象则会被存储在堆中。 在比较 String 对象时,需要使用 ...
### String类创建对象问题 #### 一、String 类与常量池、字符串池的基本概念 在 Java 中,`String` 类并不属于八种基本数据类型之一,而是作为一个对象存在。这意味着 `String` 对象默认值为 `null`。尽管如此,`...
当需要将父类的对象赋值给子类的对象时,通常的目标是保留父类的所有属性值,并可能在子类中初始化额外的属性。有几种方法可以实现这一点: 1. **构造函数参数**: 子类的构造函数可以接受一个父类对象作为参数,...
这是由于String对象存储在常量池中,修改String对象实际上会创建一个新的对象,而原始对象保持不变。这在内存管理、线程安全以及字符串操作效率上都有深远的影响。 在给定的代码示例中,有两个关键点: 1. 对于...
这行代码创建了一个 String 对象,并将其引用赋值给 str 变量。 2. 使用引号包含的文本创建 String 对象 Java 代码:String str = "abc"; 这行代码创建了一个 String 对象,并将其引用赋值给 str 变量。 3. 使用...
### string对象的操作详解 #### 一、string 类型简介及基本操作 在现代 C++ 编程中,`std::string` 是一个极其重要的类,它提供了丰富的接口用于字符串的处理,大大简化了字符串操作的复杂性。下面将详细介绍 `std...
1. 对象赋值的理解:在JavaScript中,对象赋值涉及到值类型和引用类型的区分。值类型(如数字和字符串)赋值时会进行值的复制,而引用类型(如对象和数组)赋值时复制的是引用(即内存地址),而非对象本身。这种...
在Java开发中,特别是在使用Spring框架时,将数据库中的数据转换为Map对象是一种常见的操作。这样做可以简化数据处理,使得数据以键值对的形式存储,便于快速查找和使用。Spring框架提供了强大的数据访问抽象,包括...
要将XML文件读取为String,首先需要创建一个`Document`对象,这是DOM4J的核心数据结构,代表整个XML文档。可以使用`DocumentHelper`类的静态方法`parseText()`或`readFile()`来完成这个任务。例如: ```java ...
使用 new 关键字赋值是指使用 new 关键字创建一个新的 String 对象,然后将其赋值给变量。例如:`String str = new String("Hello");` 在这种情况下,JVM 首先会创建一个新的 String 对象,然后将其存储在堆内存中,...
在Java编程语言中,String对象被认为是不可变的。这个特性是Java设计者为了优化性能、安全性和线程安全性而有意设定的。理解String对象的不可变性对于Java开发者来说至关重要,因为它影响着代码的编写、内存管理和多...
总结一下,Java中的`String`类型是不可变的,每次对`String`对象的修改都会创建一个新的`String`对象,原对象不会被改变。而数组则是可变的,可以修改其元素。在方法调用中,`String`类型的参数是按值传递(实际传递...
根据给定的文件信息,我们将深入探讨如何实现一个自定义的`String`类,并重点讲解其构造函数、析构函数、拷贝构造函数以及赋值操作符。在C++编程语言中,这些成员函数对于正确地管理动态分配的内存至关重要。 ### ...
`string`支持诸如加法运算符(`+`)、赋值运算符(`=、+=`)、比较运算符(`<、==`)以及索引访问(`[]`)等操作。 **示例代码:** ```cpp #include <string> #include int main() { std::string strinfo = ...
本案例中,开发人员在处理一个偶发性的客户端崩溃问题时发现了一个重要的错误来源:即不当使用`memset`来初始化包含`std::string`对象的结构体。 #### `memset`函数详解 `memset`是一个用于内存赋值的标准库函数,...