◆定数には再代入可能(怒られるけど)。

irb(main):001:0> HOGE = 'abc'
=> "abc"
irb(main):002:0> HOGE = 'xyz'
(irb):2: warning: already initialized constant HOGE
(irb):1: warning: previous definition of HOGE was here
=> "xyz"
irb(main):003:0> HOGE
=> "xyz"

◆書き換えは普通にできる。怒られない。

$ irb
irb(main):001:0> HOGE = 'abc'
=> "abc"
irb(main):002:0> HOGE[0] = 'x'
=> "x"
irb(main):003:0> HOGE
=> "xbc"

◆freeze すれば、書き換えできなくなる。

$ irb
irb(main):001:0> HOGE = 'abc'.freeze
=> "abc"
irb(main):002:0> HOGE[0] = 'x'
RuntimeError: can't modify frozen String
        from (irb):2:in `[]='
        from (irb):2
        from /Users/masutaka/.rbenv/versions/2.1.6/bin/irb:11:in `<main>'
irb(main):003:0> HOGE
=> "abc"

◆ただし、再代入は可能。

$ irb
irb(main):001:0> HOGE = 'abc'.freeze
=> "abc"
irb(main):002:0> HOGE = 'xyz'
(irb):2: warning: already initialized constant HOGE
(irb):1: warning: previous definition of HOGE was here
=> "xyz"
irb(main):003:0> HOGE
=> "xyz"

C言語のポインタを想像すると、素直な挙動だと思った。